[D14] 卷积 Convolution

我们在优化影像时,所采用的方法便是使用特定 kernel,针对整张影像进行卷积操作。

举例来说,模糊(blur)、边缘侦测(edge detection)、边缘强化(edge enhancement)、噪点去除(noise removal)等,都是对影像进行卷积的结果。

Convolution:

当我们用kernel对影像由左上到右下移动,再进行运算,便会得出一幅经过 filtered 的新影像!

上图运算过程: 蓝色 grid 为定义的 3 × 3 kernel,在卷积过程进行中,底下覆盖区域(图中的红色的 grid)与 kernel 进行交乘加总後(下方的 output pixel),将作为输出新图中该 kernel 区域的中心点;若由左上至右下重复进行上述步骤,轮巡整张图片後就会得到右边的图形。

执行 convolution 後,会发现输出的图片尺寸会比原来的小一圈
→ 为了保持影像完整,会使用我们提过的影像周围补零(Zero padding)

openCV作卷积

使用cv2.filter2D

import numpy as np
import cv2
import sys


imageName = "123.jpg"
image = cv2.imread(imageName)

if image is None:
    print("Could not open or find the image")
    sys.exit()


kernel_size = 5     # 设定kernel size为5x5
# 使用numpy建立 5*5且值为1/(5**2)的矩阵作为kernel。
kernel = np.ones((kernel_size, kernel_size), dtype=np.float32) / kernel_size**2

print (kernel)  # 显示矩阵内容,所有值皆为0.04的5x5矩阵


    #进行convolute,
result = cv2.filter2D(image, dst=-1, kernel=kernel, anchor=(-1, -1), delta=0, borderType=cv2.BORDER_DEFAULT)


cv2.imshow("Filter", result)   #显示影像
cv2.imshow("Original", image)

cv2.waitKey(0)  
cv2.destroyAllWindows() #关闭影像视窗

图片来源&资料参考


<<:  Day26 | 很像 Vue 的 AlpineJS(一): x-data

>>:  Day17-D3 的 Scale( ) 比例尺

[Day24]solidity合约内容讲解2

hi~我们今天要讨论有关solidity合约内容,今天的内容会延续昨天的!所以如果还没看昨天的建议...

Day17 Mixin 後,搭配 RWD

大家好,我是乌木白,今天要和大家介绍 Mixin 和 RWD 搭配该如何使用? 原本 RWD 写法...

Day 21. slate × Operation × Entrance

上一篇我们介绍了 interfaces/operations.ts 里定义的 Operation ...

[ Day 23 ] Redux 中的核心概念

上一篇 Day 22 我们已经了解了何谓 Redux 以及该套件的三大原则,今天就要来为大家介绍在...

Day50. 范例:十二生肖

本文同步更新於blog 情境:玉皇大帝要举办渡河比赛,动物选手各显神通。 <?php na...