-
大小: 5KB文件類型: .m金幣: 1下載: 0 次發(fā)布日期: 2021-06-01
- 語言: Matlab
- 標(biāo)簽: Matlab??棒材計(jì)數(shù)??
資源簡介
用matlab編寫的面積法圖像處理識(shí)別圖中棒材個(gè)數(shù),圖片名稱為0,且應(yīng)放于與程序所在同一目錄
代碼片段和文件信息
function?mianji()
global?TotalRow
global?TotalCol
global?ImageLable
%%%%%%%?處理圖像?%%%%%%%
%I為原始圖像
I=imread(‘0.jpg‘);
I1=rgb2gray(I);%灰度化
I2=medfilt2(I1[33]);%中值濾波
thresh=graythresh(I2);
I3=im2bw(I2thresh);%I3為二值化后的圖像
se=strel(‘disk‘2);
ImOpen=imopen(I3se);%開運(yùn)算
%%%%%?連通域貼標(biāo)簽?%%%%%%
%計(jì)算連通域的數(shù)量number
[TotalRowTotalCol]=size(ImOpen);%獲得圖像的總行數(shù)TotalRow總列數(shù)TotalCol
ImageLable=double(ImOpen);%獲得空標(biāo)簽
number=1;%連通域的個(gè)數(shù)賦初值0
seed=0;%種子數(shù)賦初值0
for?row=1:TotalRow
????for?col=1:TotalCol
????????K=zeros(10002);%K為存放種子點(diǎn)坐標(biāo)的2列矩陣
????????%尋找一個(gè)連通域中的第一個(gè)種子像素
????????if?ImageLable(rowcol)==1?
????????????seed=1;
????????????K(11)=row;K(12)=col;
????????????number=number+1;
????????????ImageLable(rowcol)=number;%標(biāo)記
????????end
????????%進(jìn)行區(qū)域生長
????????while?seed~=0?%直到所有的種子都生長過才會(huì)停止while循環(huán)
????????????R=K(seed1);C=K(seed2);?%選取K的最后一個(gè)為生長用種子
????????????seed=seed-1;%使用過的種子下次不再使用
????????????%八連通情況下判斷種子鄰域是否物體
????????????for?rr=-1:1
????????????????for?cc=-1:1
????????????????????if?R+rr>=1?&&?C+cc>=1?&&?R+rr<=TotalRow?&&?C+cc<=TotalCol?&&?ImageLable(R+rrC+cc)==1;%不考慮邊緣
????????????????????????ImageLable(R+rrC+cc)=number;%標(biāo)記
????????????????????????seed=seed+1;
????????????????????????K(seed1)=R+rr;K(seed2)=C+cc;
????????????????????end?%?if?R+rr>=1...的end
????????????????end?%?for?cc=-1:1的end
????????????end?%?for?rr=-1:1的end
????????end?%?while?seed~=0的end
????end?%?for?col=1:TotalCol的end
end?%?for?row=1:TotalRow?的end
number=number-1;
LableMax=number+1;%標(biāo)簽最大值
%%%%%%?求最佳平均面積?%%%%%%
%step1:計(jì)算每個(gè)連通域的面積
Area=[];%Area為存放面積的數(shù)組
Center=zeros(number2);%Center為存放中心點(diǎn)的矩陣
for?LableNum=2:LableMax?%標(biāo)簽數(shù)值是從2到LableMax
????a=LableNum-1;
????%拷貝過來的findarea函數(shù)開始
????
????????Arrr=0;%連通域的“質(zhì)量”每個(gè)像素質(zhì)量為1
XSum=0;%連通域的橫坐標(biāo)之和
YSum=0;%連通域的縱坐標(biāo)之和
for?x=1:TotalRow
????for?y=1:TotalCol
????????if?(ImageLable(xy)==LableNum)%選取標(biāo)簽圖像中標(biāo)簽為LableNum的像素
????????????XSum=XSum+x;%求目標(biāo)連通域橫坐標(biāo)和
????????????YSum=YSum+y;%求目標(biāo)聯(lián)通域縱坐標(biāo)和
????????????Arrr=Arrr+1;%求目標(biāo)連通域“總質(zhì)量”,即像素總數(shù)
???????end
????end
end
centerX=round(XSum/Arrr);
centerY=round(YSum/Arrr);
Area(a)=Arrr;
Center(a1)=centerX;
Center(a2)=centerY;
??%拷貝過來的findarea函數(shù)結(jié)束???
????
end
%step2:據(jù)算法得到最接近實(shí)際的面積均值
%AreaAver=areaaver(Area);
%拷貝過來的areaaver函數(shù)?開始
AreaOrder=sort(Area‘a(chǎn)scend‘
評(píng)論
共有 條評(píng)論