53. Scipy 实现图像二维卷积

2025-07-06  本文已影响0人  大龙10

灰度变换与直方图索引

一、滤波器

二、 Scipy 实现图像二维卷积

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

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


三、函数

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

四、例程

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()

五、注意事项:

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
上一篇 下一篇

猜你喜欢

热点阅读