头图

1.获取原图大小

img = cv2.imread("text.jpg")
h, w = img.shape[:2]

测试图片是一张256×256×3的图片
text

2.图像补0

#设置卷积核大小
K_size = 3

pad = K_size // 2
out = np.zeros((h + pad * 2, w + pad * 2, 3), dtype=np.cfloat)
out[pad: pad + h, pad: pad + w] = img.copy().astype(np.cfloat)

若K_size = 21,图像就会在周围补充20个像素的0:
补0

3.创建高斯卷积核

#设置标准差sigma
sigma = 1.3
#数字格式为小数格式方便进行高斯运算,没有采用图像格式
K = np.zeros((K_size, K_size), dtype=np.cfloat)
 for x in range(-pad, -pad + K_size):
     for y in range(-pad, -pad + K_size):
        #得到中心点位置为(0,0)的高斯卷积核,
         K[y + pad, x + pad] = np.exp(-(x ** 2 + y ** 2) / (2 * (sigma ** 2)))
#高斯滤波的系数,由于会进行归一化,可忽略
#K /= (2 * np.pi * sigma * sigma)
#归一化,使得左上角值为1
K /= K.sum()

当sigma为1.3时,最终会得到这样的高斯卷积核K:
高斯卷积核
卷积核图像绘制可见:https://segmentfault.com/a/1190000044158403
sigma表示离散程度,其越小,中心的值就会越大越集中。
g_sigma
高斯图像绘制:https://segmentfault.com/a/1190000044171157

4.进行高斯滤波

tmp = out.copy()
    for y in range(h):
    for x in range(w):
        for z in range(3):
            #高斯卷积核依次对每个像素进行处理
            out[pad + y, pad + x, z] = np.sum(K * tmp[y: y + K_size, x: x + K_size, z])
#限制图像的值的范围以及改变格式为uint,
out = np.clip(out, 0, 255)
out = out[pad: pad + H, pad: pad + W].astype(np.uint8)

当卷积核的大小为3,标准差为1.3时:
3_1.3

5.高斯滤波运用

高斯滤波在图像处理概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量(比如噪声)滤去,起到图像平滑作用,会使得图像变得模糊。由于text图是一张平滑的图片故看不出效果,使用:
测试图

能得到:
3_1.3text
能够更加平滑,看起来也更加模糊。


罗岩
1 声望0 粉丝

« 上一篇
plt-RGB模型
下一篇 »
灰度可视化补