求matlab实现膨胀腐蚀程序

求matlab实现膨胀腐蚀程序,第1张

就算给了代码, 看起来也要费一番精神的, 特别是算法不熟悉的

clear,clc

h=imread('ceshi2.bmp')

i=im2bw(h)

i1i=187

i1j=192

for ai=181:193

    for aj=186:198

        if(sqrt(double(ai-i1i)^2+double(aj-i1j)^2)<=5)

            i(ai,aj)=1%定义圆形结构元素

        end

    end

end

figure,imshow(i)

i1=i

for i1i=6:205%用B腐蚀A

    for i1j=6:205

        flag=0

        if(i1i>=181&&i1i<=193&&i1j>=186&&i1j<=198)

            continue

        else

            if(i(i1i,i1j)==1)

                for ai=i1i-5:i1i+5

                    for aj=i1j-5:i1j+5

                        if(i1(ai,aj)==0&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)

                            i(i1i,i1j)=0

                            flag=1

                         break

                        end

                    end

                    if(flag==1)

                        break

                    end

                end

            end

        end

    end

end

figure,imshow(i)

%在上面C的图像上用B进行膨胀

i2=i

for i1i=6:205%用B膨胀C

    for i1j=6:205

        flag=0

        if(i1i>=175&&i1i<=199&&i1j>=180&&i1j<=204)

            continue

        else

            for ai=i1i-5:i1i+5

                for aj=i1j-5:i1j+5   

                    if(i2(ai,aj)==1&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)

                        i(i1i,i1j)=1

                        flag=1

                        break

                    end

                 end

                if(flag==1)

                    break

                end

            end

        end

    end

end

figure,imshow(i)

%在上面D的图像上用B进行膨胀

i2=i

for i1i=6:205%用B膨胀D

    for i1j=6:205

        flag=0

        if(i1i>=175&&i1i<=199&&i1j>=180&&i1j<=204)

            continue

        else

            for ai=i1i-5:i1i+5

                for aj=i1j-5:i1j+5                   

                   if(i2(ai,aj)==1&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)

                        i(i1i,i1j)=1

                        flag=1

                        break

                    end

                end

                if(flag==1)

                    break

                end

            end

        end

    end

end

figure,imshow(i)

%在上面E的图像上用B进行腐蚀

i1=i

for i1i=6:205%用B腐蚀E

    for i1j=6:205

        flag=0

        if(i1i>=181&&i1i<=193&&i1j>=186&&i1j<=198)

            continue

        else

            if(i(i1i,i1j)==1)

                for ai=i1i-5:i1i+5

                    for aj=i1j-5:i1j+5                

                       if(i1(ai,aj)==0&&sqrt(double((ai-i1i)^2+(aj-i1j)^2))<=5)

                            i(i1i,i1j)=0

                            flag=1

                            break

                        end

                    end

                    if(flag==1)

                        break

                    end

                end

            end

        end

    end

end

figure,imshow(i)

function [y,y1]=select(ImageData,h,w)%取得最佳阈值将图像二值化

thr=0.5delta=0.05

y=(ImageData>=thr*mean(max(ImageData)))

BW2=bwareaopen(y,10)%删除小面积对象

%格式:BW2 = bwareaopen(BW,P,conn)

%作用:删除二值图像BW中面积小于P的对象,默认情况下conn使用8邻域。

SE=strel('square',15)%创建一个正方形的结构元素

%SE = strel(shape, parameters)

%根据shape指定的类型创建一个结构元素SE。

IM2=imdilate(BW2,SE)%图像膨胀

IM3=imerode(IM2,SE)%图像腐蚀

%1.开运算(先腐蚀后膨胀的过程):利用它可以消除小物体,在纤细点处分离物体,平滑较大物体边界,但同时并不明显改变原来物体的面积。OPEN(X,B)

%2.闭运算(先膨胀后腐蚀的过程):利用它可以填充物体内细小空洞,连接临近物体、平滑其边界,但同时并不明显改变原来物体的面积。CLOSE(X,B)

average=sum(sum(IM3))/(h*w) %将图像二值化

while(average<0.03||average>0.08)

if(average<0.03)

thr=thr-delta

else

thr=thr+delta

end

y=(ImageData>=thr*mean(max(ImageData)))%求向量元素的平均值

BW2=bwareaopen(y,10)%再一次删除小面积

IM2=imdilate(BW2,SE)%膨胀

IM3=imerode(IM2,SE)%腐蚀

average=sum(sum(IM3))/(h*w)%求灰度的平均值

end

y1=y

y=IM3


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11323020.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存