文章目录
1.滑动邻域操作
滑动邻域操作每次在一个像素上进行。输出的图像每一个像素都是通过对输入图像某邻域内的像素值采用某种代数运算得到的。中心像素是指输入图像真正要进行处理的像素。如果邻域的行和列都是奇数,则中心像素就是邻域的中心;如果行和列有一列为偶数,那么中心像素将位于中心偏左或偏上方。任意一个邻域矩阵的中心像素的坐标表示为
floor(([m,n]+1)/2)
邻域操作的一般算法如下:
(1)选择一个像素
(2)确定该像素的邻域
(3)用一个函数对邻域内的像素进行计算并返回这个标量结果
(4)在输出图像对应的位置填入输入图像邻域中的中心位置
(5)重复计算,遍及每一个像素点
在MATLAB中,nlfilter函数用于滑动邻域操作。其常见的调用方法为
B=nlfilter(A,[m n],fun)
其中,A为输入图像;B为输出图像;m×n为邻域尺寸;fun为运算函数。
colfilt函数用于对图像进行快速邻域操作,该函数的调用方法为
B=colfilt(A,[m n],'sliding',fun)
表示指定’sliding’函数作滑动邻域操作
im2col函数、col2im函数用于对图像进行行列操作,im2col、col2im函数的调用方法为
B=im2col(A,[m n],'sliding')
表示将以图像排成列
B=col2im(A,[m n],[mm, nn],'sliding')
表示将图像进行;列重构处理
除了上述的这些常用的运算函数,还可以使用inline自定义函数。下表列出了常见的运算函数
| 函数 | 描述 | 函数 | 描述 |
| mean | 求向量的平均值 | median | 求向量的中值 |
| mean2 | 求向量的平均值 | max | 求向量的最大值 |
| std | 求向量的标准差 | min | 求向量的最小值 |
| std2 | 求矩阵的标准差 | var | 求向量的方差 |
clear all
close all
i=imread('tire.tif');
fun=@(x)median(x(:));
b=nlfilter(i,[3 3],fun);%使用滑动邻域操作对图像进行处理
subplot(121)
imshow(i)
title('原始图像')
subplot(122)
imshow(b)
title('滑动处理后的图像')

分别使用平均值、最大值、最小值对图像进行滑动处理
clear all
close all
I=imread('cell.tif');
subplot(221)
imshow(I)
title('原始图像')
I2=uint8(colfilt(I,[5 5],'sliding',@mean));%对图像进行滑动平均处理
subplot(222)
imshow(I2)
title('滑动平均值')
I3=uint8(colfilt(I,[5 5 ],'sliding',@max));%对图像进行滑动最大值处理
subplot(223)
imshow(I3)
title('滑动最大值')
I4=uint8(colfilt(I,[5 5],'sliding',@min));%对图像进行滑动最小值处理
subplot(224)
imshow(I4)
title('滑动最小值')

指定多种sliding函数作滑动邻域操作
clear all
close all
I=im2double(imread('eight.tif'));
f1=@(x)ones(64,1)*mean(x);
f2=@(x)ones(64,1)*max(x);
f3=@(x)ones(64,1)*min(x);
I1=colfilt(I,[8 8],'distinct',f1);
I2=colfilt(I,[8 8],'distinct',f2);
I3=colfilt(I,[8 8],'distinct',f3);
subplot(221)
imshow(I)
title('原始图像')
subplot(222)
imshow(I1)
title('mean')
subplot(223)
imshow(I2)
title('max')
subplot(224)
imshow(I3)
title('mean')

用列操作函数对图像实现滑动
本文详细介绍了滑动邻域操作在图像处理中的应用,包括使用MATLAB的nlfilter、colfilt函数进行图像的滑动平均、最大值、最小值等处理,并展示了如何通过自定义函数实现多种滑动邻域操作。
2031

被折叠的 条评论
为什么被折叠?



