Matlab中bwmorph函数的使用
生活随笔
收集整理的這篇文章主要介紹了
Matlab中bwmorph函数的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Matlab中bwmorph函數(shù)的使用
Matlab中提供了一個基于形態(tài)學(xué)的處理函數(shù),即以膨脹、腐蝕等操作為基礎(chǔ),其語法格式如下:
bw2=bwmorph(bw1,operation,n);
其中bw1為輸入的二值圖像;operation是可以進(jìn)行的操作;而n為執(zhí)行該操作的次數(shù);bw2為原圖像經(jīng)過n次操作后得到的結(jié)果圖像。
參數(shù)operation的常用取值:
open:對圖像做開運算
close:對圖像做閉運算
dilate: 對圖像做膨脹處理
erode:對圖像進(jìn)行腐蝕處理
thin:對圖像進(jìn)行細(xì)化操作
skel:提取圖像骨架
spur:消除尖刺
bwmorph應(yīng)用示例,統(tǒng)計硬幣個數(shù):
clc;
clear;
close all;
A=imread('d:\Temp\hw.png');
A=rgb2gray(A);
figure,imshow(A),title('灰值圖像');thresh=graythresh(A);
B=im2bw(A,thresh);
figure,imshow(B),title('二值圖像');C=bwmorph(B,'dilate',3);
figure,imshow(C),title('膨脹');
D=bwmorph(C,'erode',3);
figure,imshow(D),title('腐蝕');[L,num]=bwlabel(D,8);
stats=regionprops(L);
t=0;
label=1;
temp=zeros(num,2); %標(biāo)記矩陣
for i=1:num %利用標(biāo)記算法得到面積近似個體的個數(shù)各有多少個if stats(i).Area>300 %忽略雜質(zhì)連通域t=t+1;temp(t,1)=stats(i).Area;if(t==1)temp(t,2)=label;endhasGot=0;for k=1:t-1if(abs(stats(i).Area-temp(k,1))<300)hasGot=1;temp(t,2)=temp(k,2);break;endendif(hasGot==0)temp(t,2)=label; label=label+1;endend
enda=0;
b=0;
c=0;
d=0;
for i=1:num %提取連通矩陣中的數(shù)據(jù)if(temp(i,2)~=0)switch temp(i,2)case 1a=a+1;case 2 b=b+1;case 3c=c+1;case 4d=d+1;endend
end
fprintf('%d個一元的 %d個一毛的 %d個瓶蓋 %d個五毛的\n',a,b,c,d);
`原始圖像
經(jīng)過灰度化、二值化、膨脹、腐蝕的圖像
利用bwlabel和regionprops函數(shù),忽略面積小于300像素點的雜志連通域影響,將面積近似的連通域歸為一類,最終得到四種不同連通域,個數(shù)分別為10,10,5,5。對應(yīng)10個一元硬幣,10個一角硬幣,5個瓶蓋,5個五角硬幣。
總結(jié)
以上是生活随笔為你收集整理的Matlab中bwmorph函数的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言实现bmp图像几何变换(移动,旋转
- 下一篇: C语言实现AES加解密