统计排序滤波
之前介绍的模糊 是 线型滤波
现在我们就要说非线性滤波
这里就介绍 几种他们分别是
- 中值滤波
- 最大值滤波(也叫作膨胀)
- 最小值滤波(也叫作腐蚀)
中值滤波
中值滤波的API函数:
medianBlur(Mat src, Mat dst, int ksize)
- src:输入如下
- dst:输出图像
- ksize:卷积核大小
注意这里的ksize 为单数
下面通过此代码来演示作用
Mat m1 = Imgcodecs.imread("C:\\test\\bmp.png" );
HighGui.imshow("原图",m1);
Mat s1 = new Mat();
Imgproc.medianBlur(m1,s1,3);
Mat s2 = new Mat();
Imgproc.medianBlur(m1,s2,5);
Mat s3 = new Mat();
Imgproc.medianBlur(m1,s3,7);
HighGui.imshow("中值滤波3",s1);
HighGui.imshow("中值滤波5",s2);
HighGui.imshow("中值滤波7",s3);
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
最大值滤波(膨胀)
膨胀的函数如下:
dilate(Mat src, Mat dst, Mat kernel)
- src:输入如下
- dst:输出图像
- kernel:卷积核,他可以是任何形状
kernel 的 获取代码如下
Mat getStructuringElement(int shape, Size ksize)
Mat getStructuringElement(int shape, Size ksize, Point anchor)
- shape:表示结构元素的形状类型
- ksize:表示结构元素的大小
- achor:表示结构元素中心点(错点)的位置
等下介绍完腐蚀,通过代码再来整体看一下
最小值滤波(腐蚀)
erode(Mat src, Mat dst, Mat kernel)
- src:输入如下
- dst:输出图像
- kernel:卷积核,他可以是任何形状
这里的 kernel 和 上面的kernel 获取方式一样
膨胀与腐蚀的应用
下面通过这一组代码 来展示膨胀与腐蚀
Mat m1 = Imgcodecs.imread("C:\\test\\bmp.png" );
HighGui.imshow("原图",m1);
//k是一个3x3 的矩形结构元素
Mat k = Imgproc.getStructuringElement(Imgproc.CV_SHAPE_RECT,new Size(3,3));
Mat s1 = new Mat();
Imgproc.dilate(m1,s1,k);
Mat s2 = new Mat();
Imgproc.erode(m1,s2,k);
HighGui.imshow("膨胀",s1);
HighGui.imshow("腐蚀",s2);
膨胀与腐蚀的用途 下一篇再说