資源簡介
文章《(來點有用的)MATLAB基于形態學的目標檢測(一)簡單圖形統計》的演示代碼。在一些例如裂紋測量、細胞統計的工作中,由于目標可能連接、重疊等情況。直接使用區域增長和連通分量計算,往往結果不好。而通過基本形態學的操作能在一定程度上解決這個問題。
代碼片段和文件信息
%?基于形態學的目標檢測(一)已知尺寸規則圖形統計
%?測試用
%?by?HPC_ZY?20190618
clear;?close?all;?clc
%%?生成測試圖
%?生成背景
rows?=?500;
cols?=?500;
bg1?=?zeros(rowscols);
bg2?=?zeros(rowscols);
%?生成圖形
N?=?8;
R?=?45;
rh?=?30;
rw?=?40;
xy?=?zeros(N2);?%?用于記錄目標真實坐標
for?k?=?1:N
????x?=?round(rows*(rand()*0.8+0.1));
????y?=?round(cols*(rand()*0.8+0.1));
????bg1?=?CreateCircle(bg1?x?y?R);
????bg2?=?CreateRectangle(bg2?x?y?rhrw);
????xy(k:)?=?[yx];
end
%?對圖形進行從左到右,從上到下排序(為了方便后期對比)
idx?=?sum(xy(:2)+xy(:1)*rows2);
[idxorder]?=?sort(idx);
%%?用形態學計算個數
%?腐蝕
se1?=?CircleStrel(round(R*0.95));
se2?=?RectangleStrel(round(rh*0.95)round(rw*0.95));
ob1?=?imerode(bg1se1);
ob2?=?imerode(bg2se2);
%?連通標記
[l1num1]?=?bwlabel(ob1);
[l2num2]?=?bwlabel(ob2);
status1?=?regionprops(l1‘BoundingBox‘);
centroid1?=?regionprops(l1‘Centroid‘);
status2?=?regionprops(l2‘BoundingBox‘);
centroid2?=?regionprops(l2‘Centroid‘);
%%?繪制
figure
subplot(231)imshow(bg1)title(‘\fontsize{14}原圖‘)
hold?on
for?i=1:num1
?????text(xy(order(i)1)-1xy(order(i)2)-1?num2str(i)‘Color‘?‘r‘)
end
subplot(232)imshow(ob1)title(‘\fontsize{14}腐蝕結果‘)
subplot(233)imshow(bg1)title(‘\fontsize{14}標記結果‘)
hold?on;
for?i=1:n
評論
共有 條評論