MATLAB R2021a 图像处理之旅 --- 3:图像预处理与后处理

本文介绍了使用MATLAB进行图像处理的实用技巧,包括图像预处理中的降噪与背景去除,以及图像后处理中的二值形态学操作。通过具体示例展示了如何利用MATLAB内置函数实现这些操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上节MATLAB R2021a 图像处理之旅 — 2我们谈到图像中的噪声会影响二值化图像的规律性,针对这类问题,我们通常会采用预处理和后处理的方式来解决。接下来我们来看看图像处理中预处理和后处理相关的操作。

4 图像预处理与后处理

4.1 图像预处理-降噪

//载入并显示图片,可以看出原图经二值化后,受噪声的影响很大
I = imread("IMG_007.jpg");
gs = im2gray(I);
gs = imadjust(gs);
BW = imbinarize(gs,"adaptive","ForegroundPolarity","dark");
imshowpair(gs,BW,"montage")

H  = fspecial("average",3);				//创建一个3x3的均值滤波器,fspecial通常被用来创建滤波片
gssmooth = imfilter(gs,H);				//将均值滤波器H应用到图像gs
BWsmooth = imbinarize(gssmooth,"adaptive","ForegroundPolarity","dark");
imshow(BWsmooth);
//直接采用均值滤波,会导致图像边缘出现黑框,我们可以使用replicate选项填充边缘像素来消除黑边
gssmooth = imfilter(gs,H,"replicate");	//使用重复选项填充边缘像素
BWsmooth = imbinarize(gssmooth,"adaptive","ForegroundPolarity","dark");
imshow(BWsmooth);
//可以看到此时图片边缘的黑边被消除了

4.2 图像预处理-背景去除

使用二值化的方法提取图像中的文字时,经常会被背景图干扰,可以用形态学的方法去除背景。

膨胀和腐蚀是图像形态学的两种处理方式。膨胀是选用形态结构中的最大值,腐蚀则是选用形态结构中最小值;MATLAB中使用strel函数创建形态学结构。膨胀和腐蚀也可以结合起来使用,先腐蚀后膨胀被称为开运算,先膨胀后腐蚀被称为闭运算。

开运算通常被解释为“移除小的物体”,有时只看这个解释会感觉不太容易理解,实际上,这种说法是建立在图像背景色为暗色,前景色为亮色的基础上,这一点在MATLAB的imbinarize函数中也有体现。

对开运算更一般的解释是:开运算能够连接暗区,去除图像中小的亮区,但对大的亮区则没有影响。同样的,对闭运算的解释是:闭运算能够连接亮区,去除图像中小的暗区,但对大的暗区则没有影响。另外一点也值得大家注意,经过开闭运算处理后的图像,其阴影部分通常会呈现出与所用的结构相似的形状。

用一张图对比来看,开运算(先腐蚀后膨胀)的效果如下:
开运算处理
闭运算(先膨胀后腐蚀)的效果如下:
闭运算处理

//载入并显示图片,可以看出二值化图像受背景影响很大
I = imread("IMG_001.jpg");
gs = im2gray(I);
gs = imadjust(gs);
H = fspecial("average",3);
gs = imfilter(gs,H,"replicate");
BW = imbinarize(gs,"adaptive","ForegroundPolarity","dark");
imshowpair(gs,BW,"montage");
//为了得到背景,我们先创建一个盘型结构,strel用来创建平面形态学结构元素,进行闭运算
SE = strel("disk",8);			//创建盘型结构,注意结构尺寸要大于文字,才能抹去文字,得到背景图
Ibg = imclose(gs,SE);			//进行闭运算
imshow(Ibg);					//显示背景图
gsSub = Ibg - gs;				//使用原图减去背景图
imshow(gsSub);
BWsub = ~(imbinarize(gsSub));	//二值化减去背景图的图像,并对结果取反,即为需要的文字信息的二值化结果
imshow(BWsub);

上述操作:先对图像进行闭操作,再用原图减去闭操作处理的结果,便会得到图像中小块的亮区纹理,在图像处理中经常被用到,这个操作通常被称为"底帽转换(bottom-hat transform)"。大家也可以直接使用MATLAB中的imbothat函数来进行上述操作。

4.3 图像后处理-二值形态学

//载入图片并显示
I = imread("IMG_002.jpg");
gs = im2gray(I);
gs = imadjust(gs);
H = fspecial("average",3);
gs = imfilter(gs,H,"replicate");
SEdisk = strel("disk",8);
Ibg = imclose(gs,SEdisk);
gsSub =  Ibg - gs; 
BW = ~imbinarize(gsSub);
imshowpair(I,BW,"montage");

//使用形态结构单元处理二值图像
SE = strel("rectangle",[3 25]);
BWstripes = imopen(BW,SE);
imshow(BWstripes);
S = sum(BWstripes,2);
plot(S);
Sbw = sum(BW,2);
hold on;
plot(Sbw);
hold off;

在这里插入图片描述
上图可以看出亮色的纹理也被检测到了。
在这里插入图片描述
使用形态结构处理二值图像,通过开运算将文字连成一体,有利于加强按行求和的数值显著化。
在这里插入图片描述
对比可见,经过对二值图像的形态学处理,有文字的行和曲线(蓝色)与无文字的行和曲线(橙色)差异更明显了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

年少时的棉花糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值