美文网首页
53. Scipy 实现图像二维卷积

53. Scipy 实现图像二维卷积

作者: 大龙10 | 来源:发表于2025-07-06 06:10 被阅读0次

灰度变换与直方图索引

一、滤波器

  • 滤波通常是指对图像中特定频率的分量进行过滤或抑制。
    图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,是常用的图像预处理操作。

  • 空间滤波器是由邻域和定义的操作构成的,滤波器规定了滤波时采用的邻域形状及该区域内像素值的处理方法。
    滤波器也被称为 “核”、“模板”、“窗口”、“掩模”、“算子”,一般在信号处理中称为 “滤波器”,在数学领域称为 “核”。
    线性滤波器就是指基于线性核的滤波,也就是卷积运算。

二、 Scipy 实现图像二维卷积

卷积运算(Convolution operation)是利用模板对图像进行邻域操作,只是把相关运算的模板旋转了 180度。

大小为 m*n 的核(模板) w 与图像 f(x,y) 的卷积运算 ( w ★ f ) ( x , y ) 的数学描述为:


  • Scipy 中提供了函数 sp.convolve2d 实现二维离散卷积的计算。

三、函数

  • 对于二维离散卷积的运算,Python的科学计算包Scipy提供了函数实现该功能:

convolve2d(in1, in2, mode="full", boundary="fill", fillvalue=0) → dst

  • in1:进行卷积运算的图像,二维数组——只能处理单通道图像,如灰度图像
  • in2:卷积操作的模板(卷积核),二维数组
  • mode:卷积类型,‘full’、‘valid’、‘same’,默认值为 ‘full’
  • boundary:边界扩充方式,‘fill’、‘wrap’、‘symm’,默认值为 ‘fill’
    • ‘fill’:以常数(fillvalue)作为像素值进行扩充(vv | abcdefg | vv)
    • ‘symm’:对称法,以图像边缘为轴进行对称填充(cba| abcdefg | gfe)
    • ‘wrap’:用另一侧元素来填充这一侧的扩充边界(efg| abcdefg | ab)
  • fillvalue:当 boundary=‘fill’ 时,以以常数(fillvalue)作为像素值进行扩充

四、例程

  • 1.66:scipy.signal 实现图像的二维卷积
import cv2
import numpy as np
from matplotlib import pyplot as plt

# 1.66 scipy.signal 实现图像的二维卷积
img = cv2.imread(r"e:/opencv/bgra.png", flags=0)  # # flags=0 读取为灰度图像
kernel = np.array([[-3-3j,0-10j,+3-3j], [-10+0j,0+0j,+10+0j], [-3+3j,0+10j,+3+3j]])  # Gx + j*Gy

# scipy.signal 实现卷积运算
from scipy import signal
convFull = signal.convolve2d(img, kernel, boundary='symm', mode='full')  # full 卷积
convValid = signal.convolve2d(img, kernel, boundary='symm', mode='valid')  # valid 卷积
convSame = signal.convolve2d(img, kernel, boundary='symm', mode='same')  # same 卷积
print(img.shape, convFull.shape, convValid.shape, convSame.shape)  # 输出图像大小有区别

plt.figure(figsize=(9, 6))
plt.subplot(131), plt.axis('off'), plt.title('Original'), plt.axis('off')
plt.imshow(img, cmap='gray', vmin=0, vmax=255)
plt.subplot(132), plt.axis('off'), plt.title('Convolve (full)')
plt.imshow(np.absolute(convFull), cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.axis('off'), plt.title('Convolve (same)')
plt.imshow(np.absolute(convSame), cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()

五、注意事项:

  • signal.convolve2d 只能对二维矩阵进行卷积操作,因此只能处理灰度图像。如果需要处理彩色图像,可以分别对每一通道进行卷积操作来实现。

  • signal.convolve2d 选择不同卷积类型 ‘full’、‘valid’、‘same’ 时,图像卷积效果的差别并不明显,但图像尺寸大小有区别,这与不同类型时采用不同的边界处理方式有关。

img.shape: (512, 512)
convFull.shape: (514, 514)
convValid.shape: (510, 510)
convSame.shape: (512, 512)

六、资料

youcans_的博客:
https://blog.csdn.net/youcans/article/details/121783234

相关文章

  • OpenCV+Python图像滤波(平滑)+ 金字塔思想

    图像处理中的滤波一般用于消除噪声,增强图像。 图像卷积(滤波) 数字图像是一个二维的离散信号,对数字图像做卷积操作...

  • Task05

    一 卷积神经网络基础 二维卷积层,常用于处理图像数据。 1 二维互相关运算 二维互相关(cross-correla...

  • 用numpy实现二维卷积

    用numpy实现二维卷积

  • 卷积,滤波,平滑

    图像处理基本概念——卷积,滤波,平滑 图像卷积:一种实现手段,可以说是数学在图像处理的一种延伸。图像滤波:一种图像...

  • 吴恩达深度学习笔记(76)-你应该了解的三维卷积

    三维卷积(Convolutions over volumes) 在上面笔记中你已经知道如何对二维图像做卷积了,现在...

  • AI数学基础29-数字图像卷积2

    在图像处理中,通过图像矩阵与精心设计的卷积核(Kernal)矩阵的卷积运算,可以实现模糊(blurring), 锐...

  • 基础卷积收录

    简介 卷积定义:卷积可以用来过滤一幅图像。实现过滤的方法是计算源图像与卷积内核之间的积,所谓卷积内核是指一个nxn...

  • 滤波系列

    一: 一维滤波 二: 二维或多维滤波 图像滤波基础介绍:   如上图所示,模板pattern与图像做卷积遍历操作,...

  • 【连载】深度学习笔记10:三维卷积、池化与全连接

    在上一讲中,我们对卷积神经网络中的卷积操作进行了详细的解读,但仅仅是对二维图像,即通道数为 1 的图像(灰度图)...

  • 图像卷积的秘密

    参考博客首先,图像卷积核卷积操作时有区别的,图像卷积不改变图像的尺寸,但是类似深度学习里的卷积层是会改变图像的大小...

网友评论

      本文标题:53. Scipy 实现图像二维卷积

      本文链接:https://www.haomeiwen.com/subject/vbgpgjtx.html