opencv 学习笔记五 二维离散卷积

卷积的用途:

卷积主要用于降噪处理,是降噪处理的一种方式;

二维离散卷积包含高斯滤波,平滑滤波,中值滤波,以及能保证图像边缘的双边滤波和导向滤波算法等;

一、了解噪声的来源以及噪声的分类;

图像中难免会存在噪声,噪声可以简单的理解为灰度值的随机变化,即拍照过程中引入了一些不想要的噪点;

噪声可分为椒盐噪声,高斯噪声,加性噪声和乘性噪声;

若想更了解噪声的来源,可参考噪声系数系列:噪声来源、NF定义及影响 - 知乎

二、卷积又称二维离散卷积

想了解卷积究竟是什么样的概念的话,可参考:

如何通俗易懂地解释卷积? - 知乎

如何通俗易懂地解释卷积? - 知乎

学习图像平滑前,有必要了解下卷积的知识,看完上述连接,对于图像处理中卷积应该了解几个关键词:卷积核,锚点,步长,内积,卷积模式

    卷积核(kernel):用来对图像矩阵进行平滑的矩阵,也称为过滤器(filter)

    锚点:卷积核和图像矩阵重叠,进行内积运算后,锚点位置的像素点会被计算值取代。一般选取奇数卷积核,其中心点作为锚点

    步长:卷积核沿着图像矩阵每次移动的长度

    内积:卷积核和图像矩阵对应像素点相乘,然后相加得到一个总和,如下图所示。(不要和矩阵乘法混淆)


#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <stdio.h>

using namespace cv;
using namespace std;               


RNG rng(12345);
Scalar color[7] = {
    (Scalar(0,0,255)),//红色
    (Scalar(0,255,0)),//绿色
    (Scalar(255,0,0)),//蓝色
    (Scalar(255,255,0)),//浅蓝色
    (Scalar(255,0,255)),//紫色
    (Scalar(0,255,255)),//黄色
    (Scalar(128,128,192)),//浅粉色
};
int main()
{
    Mat image,gray_img,thread_img,resize_3d_img, resize2_img,dst_img, dst2_img, dst3_img;

    image = imread("../warpAffine_3d.jpg", 1);
    if (image.empty()) {
        cout << "无此图片" << endl;
        return 0;
    }
    cvtColor(image, gray_img,COLOR_RGB2GRAY,0);//将图像转换为灰度图

    threshold(gray_img, thread_img, 100, 255, THRESH_BINARY_INV);//将灰度图转换为二值图


    Point2f srcM[4],dstM[4];
    srcM[0] = Point2f(45, 43);//左上角绿色顶点
    srcM[1] = Point2f(219, 39);//右上角绿色顶点
    srcM[2] = Point2f(219, 209);//右下角绿色顶点
    srcM[3] = Point2f(31, 209);//左下角绿色顶点

    dstM[0] = Point2f(0, 0);
    dstM[1] = Point2f(300, 0);
    dstM[2] = Point2f(300, 300);
    dstM[3] = Point2f(0, 300);

    Mat t_mat = Mat::zeros(2, 4, CV_32FC1);
   
    while (1) 
    {
        imshow("原图", image);
        waitKey(1);
        
        flip(image, dst_img, -1);//0沿着X轴翻转,1沿着Y轴翻转,-1先沿着X轴翻转再沿着Y轴翻转
        imshow("3卷积图像", dst_img);
        waitKey(1);

        t_mat = getPerspectiveTransform(srcM, dstM, 0);
        warpPerspective(image, resize_3d_img, t_mat, Size(300, 300), 1, 0, 255);
        imshow("3d仿射变换", resize_3d_img);
        waitKey(1);

        Mat board_mat = (Mat_<float>(3, 3) <<  -1, -1, -1,
                                            -1, 9, -1,
                                            -1, -1, -1);
        filter2D(resize_3d_img, dst2_img, image.depth(), board_mat);
        imshow("边缘突出卷积图像", dst2_img);
        waitKey(1);

        Mat blur_mat = (Mat_<float>(3, 3) << 1.0f / 9, 1.0f / 9, 1.0f / 9,
            1.0f / 9, 1.0f / 9, 1.0f / 9,
            1.0f / 9, 1.0f / 9, 1.0f / 9);
        filter2D(resize_3d_img, dst3_img, image.depth(), blur_mat);
        imshow("平滑卷积图像", dst3_img);
        waitKey(1);

        
    }
    return 1;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

逐梦者-未来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值