数字图像处理--卷积运算

数字图像处理–卷积运算

1、主要内容

(1)自己编写一维卷积和二维卷积运算程序;
(2)用Python自带的一维卷积和二维卷积函数实现卷积运算;
(3)对比(1)(2)结果,对自己编写的运算程序进行修改和优化。

2、源代码

import cv2
import matplotlib.pyplot as plt
import scipy.signal
import torch


print('==========================一维卷积=========================')
#一维卷积
G = [1,2,3,4,5,6,7,8,9]
H = [-1,0,1]
F = []
F_optim = []
#自定义一维卷积函数
def conv1d(vector,kernel):

    for i in range(len(vector)):
        if i == 0:
            x = kernel[-1]*vector[i]
            F.append(x)
        elif i == 1:
            x = kernel[-1]*vector[i] + kernel[-2]*vector[i-1]
            F.append(x)
        elif 1

3、实现结果

3.1 一维卷积
本实验中,针对一维卷积,自定义一维卷积函数所选取得到数据源是一个简单的Vector([1,2,3,4,5,6,7,8,9]),卷积核为([-1,0,1])。对数据源进行一维卷积结果如下所示。
在这里插入图片描述

得出结果后,调用了库函数scipy.signal.convolve()对该数据源进行卷积。

在这里插入图片描述
通过对库自带函数的分析可得,库自带一维卷积函数用的卷积核是([1,0,-1]),并对数据进行了填充,对边缘元素也进行了卷积运算。
因此,对自定义一维函数进行了边缘考虑。其修改后的一维卷积函数对数据源进行卷积,运行结果如下所示。

在这里插入图片描述

3.2 二维卷积
本实验中,针对二维卷积,读取了一幅尺寸为(1200*675)大小的灰度图像,并自定义二维卷积函数对该图像进行了边缘零填充,并进行了二维卷积运算,最后,用了最大最小归一化处理。其操作运算结果,如下图所示。
数字图像处理--卷积运算_第1张图片

自定义二维卷积对图像主体有增强作用,起到了平滑作。接着,本实验调用了scripy.signal.convolve2d()函数,完成了对源数据图像的二维卷积,其卷积结果如下图所示。
数字图像处理--卷积运算_第2张图片

从上述卷积结果图中,各个像素的灰度值都比较小,但是轮廓结果还是比较清晰的,起到了边缘检测的效果。因此,对自定义二维卷积函数进行了修改。首先是,将原来的卷积核([[1,1,1],[1,2,1],[1,1,1]])更改为了([[-1,-2,-1],[0,0,0],[1,2,1]]);其次,并且在卷积以后进行了限制灰度值在(0,255)之间的规范化。其修改结果如下图所示。
数字图像处理--卷积运算_第3张图片
从上图可知,修改后的二维卷积函数也实现了边缘检测功能,对比先前起到平滑作用的卷积效果来说。卷积核如何设置决定了卷积后的效果。

小白记录!!!

你可能感兴趣的:(数字图像处理,python,深度学习,开发语言,图像处理)