实现形态学开闭和闭开运算的matlab程序??????????

实现形态学开闭和闭开运算的matlab程序??????????,第1张

i=imread('image.jpg')

i1=rgb2gray(i)转灰度图像

i2=im2bw(i1) 二值化

i3 = bwmorph(i2,'close') 闭运算

imshow(i3)

i4 = bwmorph(i2,'open') 开运算

figure, imshow(i4)

bwmorph还支持类似bothat tophat thin等 *** 作 个体看下help参数说明

前提条件是传入的图像应该是二值后的

开运算属于形态学图像处理,先腐蚀后膨胀。作用:可以使边界平滑,消除细小的尖刺,断开窄小的连接,保持面积大小不变。

开运算数学上是先腐蚀后膨胀的结果,开运算的结果为完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分。闭运算在数学上是先膨胀再腐蚀的结果,闭运算的结果也是会平滑对象的轮廓,但是与开运算不同的是,闭运算一般会将狭窄的缺口连接起来形成细长的弯口,并填充比结构元素小的洞。

实现形态学开闭和闭开运算的matlab程序:

i=imread('image.jpg')

i1=rgb2gray(i)转灰度图像

i2=im2bw(i1)   二值化

i3 = bwmorph(i2,'close') 闭运算

imshow(i3)

i4 = bwmorph(i2,'open') 开运算

figure, imshow(i4)

bwmorph还支持类似bothat tophat th

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


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

原文地址: http://outofmemory.cn/yw/12054327.html

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

发表评论

登录后才能评论

评论列表(0条)

保存