差分滤波器的介绍及用于图像特征检测

Posted wojianxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了差分滤波器的介绍及用于图像特征检测相关的知识,希望对你有一定的参考价值。

一. 差分滤波器

        差分滤波器对于图像亮度急剧变化的边缘有提取效果,可以获得邻近像素的差值。

二. 差分滤波器形式

技术图片
竖直差分滤波器 ↑
 
技术图片
水平差分滤波器 ↑
 
技术图片
对角线差分滤波器 ↑

三. python实现差分滤波器

        实验:实现上述三个差分滤波器,并作用于图像,查看图像各个方向上信息提取效果

import cv2

import numpy as np

# Gray scale

def BGR2GRAY(img):

    b = img[:, :, 0].copy()

    g = img[:, :, 1].copy()

    r = img[:, :, 2].copy()

    # Gray scale

    out = 0.2126 * r + 0.7152 * g + 0.0722 * b

    out = out.astype(np.uint8)

    return out

# different filter

def different_filter(img, K_size=3):

    H, W = img.shape

    # Zero padding

    pad = K_size // 2

    out = np.zeros((H + pad * 2, W + pad * 2), dtype=np.float)

    out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)

    tmp = out.copy()

    out_v = out.copy()

    out_h = out.copy()

    out_d = out.copy()

    # vertical kernel

    Kv = [[0., -1., 0.],[0., 1., 0.],[0., 0., 0.]]

    # horizontal kernel

    Kh = [[0., 0., 0.],[-1., 1., 0.], [0., 0., 0.]]

    # diagonal kernel

    Kd = [[-1.,0.,0.],[0.,1.,0.],[0.,0.,0.]]

    # filtering

    for y in range(H):

        for x in range(W):

            out_v[pad + y, pad + x] = np.sum(Kv * (tmp[y: y + K_size, x: x + K_size]))

            out_h[pad + y, pad + x] = np.sum(Kh * (tmp[y: y + K_size, x: x + K_size]))

            out_d[pad + y, pad + x] = np.sum(Kd * (tmp[y: y + K_size, x: x + K_size]))

    out_v = np.clip(out_v, 0, 255)

    out_h = np.clip(out_h, 0, 255)

    out_d = np.clip(out_d, 0, 255)

    out_v = out_v[pad: pad + H, pad: pad + W].astype(np.uint8)

    out_h = out_h[pad: pad + H, pad: pad + W].astype(np.uint8)

    out_d = out_d[pad: pad + H, pad: pad + W].astype(np.uint8)

 

    return out_v, out_h, out_d

# Read image

img = cv2.imread("../gezi.jpg").astype(np.float)

# grayscale

gray = BGR2GRAY(img)

# different filtering

out_v, out_h,out_d = different_filter(gray, K_size=3)

# Save result

cv2.imwrite("out_v.jpg", out_v)

cv2.imshow("result_v", out_v)

cv2.imwrite("out_h.jpg", out_h)

cv2.imshow("result_h", out_h)

cv2.imwrite("out_d.jpg", out_d)

cv2.imshow("result_d", out_d)

cv2.waitKey(0)

cv2.destroyAllWindows()

 


四. 实验结果

技术图片
原图 ↑
 
技术图片
水平差分滤波器作用结果 ↑
 
技术图片
竖直差分滤波器作用结果 ↑
 
技术图片
对角线(左上>右下)差分滤波器作用结果 ↑

        可以看到,实验结果如我们之前判断的那样,水平差分滤波器检测出了图像中的竖直特征;竖直差分滤波器检测出了图像中的水平特征;对角线(左上>右下)差分滤波器检测出了图像的对角线(左下>右上)特征。


五. 参考材料:

  https://www.jianshu.com/p/87c32d5085f6

以上是关于差分滤波器的介绍及用于图像特征检测的主要内容,如果未能解决你的问题,请参考以下文章

图像去噪基于matlab GUI加权+绝对差分中值滤波图像去噪含Matlab源码 1880期

目标跟踪基于背景消减的图像帧间差分法目标检测及matlab仿真

Python图像锐化及边缘检测(RobertsPrewittSobelLapllacianCannyLOG)

Emboss滤波器实现及应用

智能识别系统设计---图像特征提取

Max-Min Filter 实现及用于检测图像边缘