zoukankan      html  css  js  c++  java
  • Emboss滤波器实现及应用

    一. Emboss 滤波器介绍:

            Emboss滤波器常用于检测图像的边缘和轮廓,能够有效地增强图像的高频信息(边缘和轮廓),并保留图像的低频信息(图像内容)。


    Emboss 滤波器卷积核 ↑
     

    二. 实验:实现Emboss滤波器,使用Emboss滤波器增强图像轮廓

     1 import cv2
     2 
     3 import numpy as np
     4 
     5 # Gray scale
     6 
     7 def BGR2GRAY(img):
     8 
     9     b = img[:, :, 0].copy()
    10 
    11     g = img[:, :, 1].copy()
    12 
    13     r = img[:, :, 2].copy()
    14 
    15     # Gray scale
    16 
    17     out = 0.2126 * r + 0.7152 * g + 0.0722 * b
    18 
    19     out = out.astype(np.uint8)
    20 
    21     return out
    22 
    23 # emboss filter
    24 
    25 def emboss_filter(img, K_size=3):
    26 
    27     H, W = img.shape
    28 
    29     # zero padding
    30 
    31     pad = K_size // 2
    32 
    33     out = np.zeros((H + pad * 2, W + pad * 2), dtype=np.float)
    34 
    35     out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)
    36 
    37     tmp = out.copy()
    38 
    39     # emboss kernel
    40 
    41     K = [[-2., -1., 0.],[-1., 1., 1.], [0., 1., 2.]]
    42 
    43     # filtering
    44 
    45     for y in range(H):
    46 
    47         for x in range(W):
    48 
    49             out[pad + y, pad + x] = np.sum(K * (tmp[y: y + K_size, x: x + K_size]))
    50 
    51     out = np.clip(out, 0, 255)
    52 
    53     out = out[pad: pad + H, pad: pad + W].astype(np.uint8)
    54 
    55     return out
    56 
    57 # Read image
    58 
    59 img = cv2.imread("../paojie.jpg").astype(np.float)
    60 
    61 # BGR2GRAY
    62 
    63 gray = BGR2GRAY(img)
    64 
    65 # emboss filtering
    66 
    67 out = emboss_filter(gray, K_size=3)
    68 
    69 # Save result
    70 
    71 cv2.imwrite("out.jpg", out)
    72 
    73 cv2.imshow("result", out)
    74 
    75 cv2.waitKey(0)
    76 
    77 cv2.destroyAllWindows()

    三. 实验结果:


    Emboss 滤波器作用于图像后 ↑
     

    原图转换为灰度图像后 ↑
     

            可以看到,Emboss滤波器能够有效地增强图像的轮廓。


    四. 参考内容:

      https://www.jianshu.com/p/0f7102dec590

  • 相关阅读:
    CSS练习
    大作业“抽屉页面”html+css
    html练习代码
    协程-基于TCP的高并发通信
    协程-爬虫示例
    互斥锁,递归锁,信号量
    三层架构(我的理解及详细分析)
    递归算法经典实例小结(C#实现)
    使用XmlWriter写Xml
    使用XmlReader读Xml
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12508170.html
Copyright © 2011-2022 走看看