2011-10-29 46 views
6

Tôi có một số hạt mà tôi đã xác định trong một hình ảnh lớn hơn, và cần phải phân tích thành hình ảnh nhỏ hơn cho mỗi hạt. Tôi đã sử dụng chức năng 'BoundingBox' của regionprops, nhưng vẫn chưa thành công. Làm thế nào bây giờ tôi có thể tạo một hình ảnh phụ hình chữ nhật của tôi bằng cách sử dụng BoundingBox? Tôi có thể sử dụng BoundingBox để vẽ hình chữ nhật trên hình ảnh gốc, nhưng các tham số được trả về bởi BoundingBox dường như không có kích thước pixel (x, y, chiều rộng, chiều cao), (x1, y1, x2, y2), v.v. sẽ mong đợi một hộp giới hạn để trở về. Tôi đã viết một số mã mẫu sử dụng coins.png để giúp mọi người dễ hiểu hơn. Bạn có thể giúp tôi với điều này? Cảm ơn! .Làm thế nào để có được một subimage hình chữ nhật từ regionprops (Hình ảnh, 'BoundingBox') trong Matlab?

figure(1); 
I = imread('coins.png'); 
bw = im2bw(I, graythresh(I)); 
bw2 = imfill(bw,'holes'); 
imshow(bw2); 


figure(2); 
L = bwlabel(bw2); 
imshow(label2rgb(L, @jet, [.7 .7 .7])) 

figure(3); 
imshow(I); 
s = regionprops(L, 'BoundingBox'); 
rectangle('Position', s(1).BoundingBox); 

Trả lời

7

Các thông số trả về bởi regionprops là [y,x,width,height] trong ma trận tọa độ (cũng "unexpected Matlab" thấy

Vì vậy, để trích xuất các hình chữ nhật, bạn viết:

subImage = I(round(s(1).BoundingBox(2):s(1).BoundingBox(2)+s(1).BoundingBox(4)),... 
     round(s(1).BoundingBox(1):s(1).BoundingBox(1)+s(1).BoundingBox(3))); 
+1

Yup, và bạn có thể lặp qua 's.NumObjects', các iterator thay Jonas' '1'. –

12

Theo tài liệu của REGIONPROPS:

.210

BoundingBox[ul_corner width], trong đó:

  • ul_corner: ở dạng [x y z ...] và xác định góc trên bên trái của hộp bounding

  • rộng: ở dạng [x_width y_width ...] và chỉ định chiều rộng của hộp giới hạn dọc theo mỗi thứ nguyên

Bây giờ bạn có thể sử dụng chức năng như IMCROPimcrop(I, rect) nơi:

rect là một vị trí phần tử Bốn vector [xmin ymin width height] mà xác định kích thước và vị trí của hình chữ nhật cây trồng.

Như vậy:

s = regionprops(L, 'BoundingBox'); 

subImage = imcrop(I, s(1).BoundingBox); 
imshow(subImage) 
+0

Tôi không biết về việc sử dụng 'imcrop' này, nó dễ đọc hơn là lập chỉ mục trực tiếp hình ảnh. FWIW, các tài liệu nói 'imcrop' tròn giống như Jonas làm trong câu trả lời của anh ta. –

+0

@reve_etrange: điều quan trọng là phải hiểu các phương pháp thể hiện vị trí hình ảnh khác nhau: http://www.mathworks.com/help/toolbox/images/brcu_al-1.html – Amro

+0

Liên kết trên đã thay đổi thành: http: // www .mathworks.com/help/images/image-coordinate-systems.html. Hộp công cụ xử lý ảnh cũng đã giới thiệu các lớp tham chiếu không gian mới: 'imref2d' và' imref3d' – Amro

Các vấn đề liên quan