时域卷积(spatialconvolution)
对图像做时域滤波,其数学原理就是:原图像和卷积核(kernel)做卷积运算,因此我们第一个要实现的函数就是时域卷积。
第一步:Flip filter kernel
i)原理
在这个地方我写作业的时候,就出现了问题,因为之前我对卷积核翻转180度的实现有误解。通过查阅资料我了解到,将卷积核也就是一个矩阵翻转180度有两种程序上的实现方法:
原矩阵记作M, 旋转180度后的矩阵记作m,i,j 分别表示行号和列号,rows,cols分别表示原矩阵的行数和列数,新矩阵m可表示成:
m[i][j] = M[rows-i-1][cols-j-1]
将原矩阵做水平和垂直翻转,亦可实现旋转180度的效果
ii)代码实现
a)通过转换公式实现
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import numpy as np;
import cv2
#This function determines the matrix rotation
#model decides the rotation derection:
# model = 1 := rotation 180(clockweise)
# TODO: compare the rotation 90 degree with flip horizontal
def rotation(M,model):
m = np.copy(M)
rows = M.shape[0]
cols = M.shape