openCv-图像操作

卷积的概念

如何通俗易懂的理解卷积:https://www.zhihu.com/question/22298352

图像的噪声

https://baike.baidu.com/item/%E5%9B%BE%E5%83%8F%E5%99%AA%E5%A3%B0/4116468?fr=aladdin

滤波器的概念

滤波(Wave filtering)是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。在图像处理中,滤波是图像预处理的一种。图像处理中滤波将信号中特定的波段频率滤除,从而保留所需要的波段频率信号。根据选择保留的不同频段可以体现这么两个作用

https://www.jianshu.com/p/68cbd3d8080b

原图
在这里插入图片描述

线性滤波

均值模糊

原理:卷积核的所有系数相同,基于相同系数的卷积和完成卷积操作
作用:可以减低图像噪点,模糊图像,减低图像的对比度。

blur(Mat src,Mat dst,Size kSize,Point anchor, int borderType)
kszie:卷积核大小,如果想水平模糊或者垂直模糊,Size(100,1) 或Size(1,100)
anchor:表示卷积和的中心位置
边缘填充类型
  Imgproc.blur(src, dst, new Size(5, 5), new Point(-1, -1), Core.BORDER_DEFAULT);

在这里插入图片描述

高斯模糊

原理:卷积核中的每个系数具有不同系数(权重)
作用:可以减低图像噪点,模糊图像,减低图像的对比度。

GaussianBlur(Mat src,Mat dst,Size ksize,double sigmax,double,sigmayY,int borderType)
ksize:表示卷积核大小,当ksize=Size(0,0) 表示从sigmaX 计算
sigmaX:表示X方向的模糊
sigmaY:表示Y方向的模糊
边缘填充类型

                Imgproc.GaussianBlur(src, dst, new Size(0, 0), 15);

在这里插入图片描述

均值滤波和高斯滤波经常用于图像预处理,能够起到抑制噪声的作用,使用他们选择的卷积核大小通常为3x3或5x5

统计排序滤波

统计排序是最简单的非线行滤波器,可以帮助我们抑制图像中特定类型的噪声

中值滤波

椒盐噪声有明显的抑制作用,是一个很好的图像降噪的滤波函数

mgproc.medianBlur(Mat src,Mat dst,int kszie);
ksize:常见为3:5,模版大小为奇数
               Imgproc.medianBlur(src, dst, 5);

在这里插入图片描述

最大值和最小值滤波

最大值和最小值和中值滤波相似,唯一不同的是对于排序之后的相素前两者去最大和最小值作为输出

dilate(Mat src,Mat dst,Mat kernel) 膨胀(最大值滤波)用于最大值替换中心元素
erode(Mat src,Mat dst,Mat kernel)腐朽 (最小值滤波)用于最小值替换中心元素

kernel:表示结构元素或者卷积核,可以是任意形状
 Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));
 Imgproc.dilate(src, dst, kernel);
 Imgproc.erode(src, dst, kernel);

在这里插入图片描述

高斯双边滤波

双边滤波可以很好的保留边缘的同时,抑制平坦区图像的噪声

bilateralFilter(Mat src,Mat dst,int d,double sigmaColor,double sigmaSpace)
d:表示用来过滤的卷积核直径大小
sigmaColor:颜色权重计算时候需要的参数
sigmaSpace:空间权重计算的时候需要的参数
通常情况,sigmaColor的取值在100~150左右,sigmaSpace的取值在10~25之间,双边滤波效果最好,调用函数速度比较快
 Imgproc.bilateralFilter(src, dst, 0, 150, 15);

在这里插入图片描述
在这里插入图片描述

均值迁移滤波

主要通过概率密度估算与中心迁移来实现图像边缘保留滤波.基本原理是通过创建大小固定的卷积核窗口,搜索并计算该窗口中心像素P(x,y)范围内所有满足条件的像素,计算它们的中心位置,然后基于新中心位置再次计算更新,直到中心位置不再变化或者两次变化的中心的距离满足指定的收敛精度值为止。

pryMeanShiftFiltering(Mat src,Mat dst,double sp,double sr,int maxLevel,TermCriteria termcrit)
sp:图像色彩空间,也是窗口大小
sr 图像色彩像素值范围,也是像素差值范围
maxLevel 表示金字塔层数
termcrit 表示循环或迭代次数
Imgporc.pryMeanShiftFiltering(src,dst,10.50)

在这里插入图片描述

自定义滤波

filter2D(Mat src,Mat dst,int ddepth, Mat kernel) 
ddepth 图像深度 -1表示与图像一制
kernel 自定义图像卷积

案例

          //模糊
           Mat k = new Mat(3, 3, CvType.CV_32FC1);
            float[] data = new float[]{1.0f/9.0f,1.0f/9.0f,1.0f/9.0f,
                    1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f,
                    1.0f/9.0f, 1.0f/9.0f, 1.0f/9.0f};
            k.put(0, 0, data);
            Imgproc.filter2D(src, dst, -1, k);
           //锐化
            Mat k = new Mat(3, 3, CvType.CV_32FC1);
            float[] data = new float[]{0,1.0f/8.0f,0,
                                        1.0f/8.0f, 0.5f, 1.0f/8.0f,
                                        0, 1.0f/8.0f, 0};
            k.put(0, 0, data);
            Imgproc.filter2D(src, dst, -1, k);
            //梯度
            Mat kx = new Mat(3, 3, CvType.CV_32FC1);
            Mat ky = new Mat(3, 3, CvType.CV_32FC1);

            float[] robert_x = new float[]{-1,0,0,1};
            kx.put(0, 0, robert_x);

            float[] robert_y = new float[]{0,1,-1,0};
            ky.put(0, 0, robert_y);

            Imgproc.filter2D(src, dst, -1, kx);
            Imgproc.filter2D(src, dst, -1, ky);

在这里插入图片描述

形态学
OpenCv 提供了几个非常有用的图像形态学操作API,其工作原理与卷积类似,不同的是我们称呼卷积和为结构元素,计算方式也有算术运算改为简单的集合元素与逻辑运算,而且可以将结构元素定义为任意结构

// 创建结构元素
   Mat k = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(15, 15), new Point(-1, -1));

腐蚀和膨胀

腐蚀和膨胀的常见操作对象主要是二值图像或者灰度图像

膨胀
 Imgproc.morphologyEx(src, dst, Imgproc.MORPH_DILATE, k);

在这里插入图片描述

腐蚀
                Imgproc.morphologyEx(src, dst, Imgproc.MORPH_ERODE, k);

在这里插入图片描述

开操作
                Imgproc.morphologyEx(src, dst, Imgproc.MORPH_OPEN, k);

在这里插入图片描述

//闭操作
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_CLOSE, k);

在这里插入图片描述

黑帽
Imgproc.morphologyEx(src, dst, Imgproc.MORPH_BLACKHAT, k);

在这里插入图片描述

 顶帽
                Imgproc.morphologyEx(src, dst, Imgproc.MORPH_TOPHAT, k);

在这里插入图片描述

基本梯度
                Imgproc.morphologyEx(src, dst, Imgproc.MORPH_GRADIENT, k);

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值