0
通過關注這篇文章Using ismember with the output of regionprops我能夠選擇性地隔離我想要的連接組件。例如使用我的代碼如下:如何圍繞ismember選擇的對象創建邊界框?
img = rgb2gray(imread('W1\Writer1_01_02.jpg'));
bw_normal2 = im2bw(img, graythresh(img));
bw22 = imcomplement(bw_normal2);
bw3 = bwmorph(bw22, 'dilate');
[label2,n2] = bwlabel(bw3);
stats2 = regionprops(label2, {'Area', 'BoundingBox'});
area2 = [stats2.Area];
idx = find((28 <= area2) & (area2 <= 40));
BW2 = ismember(label2,idx);
figure, imshow(BW2)
我可以很容易地顯示僅包含所連接的組件,其面積爲28和40。所以
之間但我代替可以使輸出原始圖像中此連接組件周圍的邊界框。我的意思是如果這是原始圖像:
我可以在原始圖像上圍繞我所需的組件製作邊框嗎?我知道,這是使周圍的一切我連成分
imshow(img);
for j=1:n2
hold on
rectangle('Position',[stats(j).BoundingBox(1),stats(j).BoundingBox(2),stats(j).BoundingBox(3),stats(j).BoundingBox(4)],...
'EdgeColor','r','LineWidth',2);
end
的邊界框的代碼,但我怎麼只會使邊框僅約28和40之間的區域爲元素?如上所示,而不是製作完全不同的圖像。
我可能沒有正確的理解這個問題。但是看起來你有下面這段代碼:「對於j = 1:n2」,這意味着你正在遍歷圖像上的每個組件。找到表示感興趣對象的數字並繪製邊界框。 –
這將是相當困難和耗時。假設我只想要面積爲40的對象,然後打開工作區中的''stats2.Area'',找到它,然後將其應用於我的代碼。我只是添加了第二個代碼,以顯示我知道如何在所有組件上繪製邊界框,但是如何在由「ismember」選擇的元素的原始圖像上繪製? – StuckInPhD
呃,'stats2(idx).BoundingBox'有什麼困難?如果您不清楚代碼的工作原理,請嘗試在調試器中逐步查看值,以及它們是如何逐行更改的(使用「跳過」而不是「跳入」以避免內存所有功能) – Notlikethat