运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

数字图像处理——非锐化屏蔽与高提升滤波【像素级别处理】(python)

运维开发网 https://www.qedev.com 2021-04-14 08:51 出处:51CTO 作者:谁唱江南断肠句
数字图像处理——非锐化屏蔽与高提升滤波【像素级别处理】(python)文章目录数字图像处理——非锐化屏蔽与高提升滤波【像素级别处理】(python)非锐化屏蔽介绍高提升滤波介绍非锐化屏蔽介绍其中非锐化屏蔽是指在原图像中减去一个经过锐化的图层其步骤为:模糊原图像原图像减去模糊图像(差值为模版)把模版加到原图像上令f‾(x,y)\overline{f}(x,y)f​(x,y)为模...

数字图像处理——非锐化屏蔽与高提升滤波【像素级别处理】(python)

文章目录

  • 数字图像处理——非锐化屏蔽与高提升滤波【像素级别处理】(python)
    • 介绍
    • 介绍
    • 非锐化屏蔽
    • 高提升滤波
    • 代码实现

非锐化屏蔽

介绍

其中非锐化屏蔽是指在原图像中减去一个经过锐化的图层

其步骤为:

  1. 模糊原图像
  2. 原图像减去模糊图像(差值为模版)
  3. 把模版加到原图像上

令                                 f                         ‾                            (                    x                    ,                    y                    )                         \overline{f}(x,y)           f(x,y)为模糊图像

首先我们可以得到模版

                                g                                  m                          a                          s                          k                                    (                    x                    ,                    y                    )                    =                    f                    (                    x                    ,                    y                    )                    −                             f                         ‾                            (                    x                    ,                    y                    )                         g_{mask}(x,y)=f(x,y)-\overline{f}(x,y)           gmask(x,y)=f(x,y)−f(x,y)

然后在原图像加上模版的一个权重k(k>0):

                       g                    (                    x                    ,                    y                    )                    =                    f                    (                    x                    ,                    y                    )                    +                    k                    ∗                             f                         ‾                            (                    x                    ,                    y                    )                         g(x,y)=f(x,y)+k*\overline{f}(x,y)           g(x,y)=f(x,y)+k∗f(x,y)

当k=1时,所得的为非锐化屏蔽

高提升滤波

介绍

其中非锐化屏蔽是指在原图像中加上一个经过锐化的图层

其步骤为:

  1. 模糊原图像
  2. 原图像减去模糊图像(差值为模版)
  3. 把模版加到原图像上

令                                 f                         ‾                            (                    x                    ,                    y                    )                         \overline{f}(x,y)           f(x,y)为模糊图像

首先我们可以得到模版

                                g                                  m                          a                          s                          k                                    (                    x                    ,                    y                    )                    =                    f                    (                    x                    ,                    y                    )                    −                             f                         ‾                            (                    x                    ,                    y                    )                         g_{mask}(x,y)=f(x,y)-\overline{f}(x,y)           gmask(x,y)=f(x,y)−f(x,y)

然后在原图像加上模版的一个权重k(k>0):

                       g                    (                    x                    ,                    y                    )                    =                    f                    (                    x                    ,                    y                    )                    +                    k                    ∗                             f                         ‾                            (                    x                    ,                    y                    )                         g(x,y)=f(x,y)+k*\overline{f}(x,y)           g(x,y)=f(x,y)+k∗f(x,y)

当k>1时,为高提升滤波

代码实现

import cv2import numpy as npimport matplotlib.pyplot as plt

img = cv2.imread('Fig0340.tif')  # 测试图片H = img.shape[0]W = img.shape[1]#   产生5*5的Gaussian smoothing filter# Σ=3,h(x,y)=e^((x^2+y^2)/(2*Σ*Σ))h = np.zeros((5, 5))  # 高斯模板for i in range(5):for j in range(5):x = i - 2y = j - 2h[i, j] = np.power(np.e, -(x * x + y * y) / 18)print(h)print(sum(h))print(sum(sum(h)))h /= np.sum(h)  # 归一化处理print('----')print(h)print(sum(h))print(sum(sum(h)))spanImg = np.zeros((H + 4, W + 4, 3), np.uint8)  # 5*5扩充后的图像# print('----------')# print(spanImg)for i in range(H):for j in range(W):spanImg[i + 2, j + 2] = img[i, j]blurImg = np.zeros((H, W, 3), np.uint8)  # 高斯模糊化之后的图像for i in range(H):for j in range(W):pix = 0for x in range(5):for y in range(5):pix += h[x, y] * spanImg[i + x, j + y, 0]blurImg[i, j, 0] = round(pix)blurImg[i, j, 1] = blurImg[i, j, 0]blurImg[i, j, 2] = blurImg[i, j, 0]# Unsharp maskUmPix = np.zeros((H, W), np.int32)max = 0min = 255for i in range(H):for j in range(W):UmPix[i, j] = int(img[i, j, 0]) - blurImg[i, j, 0]if UmPix[i, j] > max:max = UmPix[i, j]if UmPix[i, j] < min:min = UmPix[i, j]t = 0if max > min:t = 255 / (max - min)# 归一化的掩蔽图像UmImg = np.zeros((H, W, 3), np.uint8)for i in range(H):for j in range(W):UmImg[i, j, 0] = round((UmPix[i, j] - min) * t)UmImg[i, j, 1] = UmImg[i, j, 0]UmImg[i, j, 2] = UmImg[i, j, 0]# 压缩至0-255之间的加入钝化掩蔽的图像simgk = np.zeros((H, W, 3), np.uint8)spixk = np.zeros((H, W), np.int32)# 加入钝化掩蔽之后的图像imgk = np.zeros((H, W, 3), np.uint8)pixk = np.zeros((H, W), np.int32)# 高提升滤波后图像imgk2 = np.zeros((H, W, 3), np.uint8)pixk2 = np.zeros((H, W), np.int32)# 这里用到了截断来处理,并没有用scale来处理for i in range(H):for j in range(W):pixk[i, j] = img[i, j, 0] + UmPix[i, j]spixk[i, j] = pixk[i, j]if pixk[i, j] > 255:pixk[i, j] = 255if pixk[i, j] < 0:pixk[i, j] = 0pixk2[i, j] = round(img[i, j, 0] + 4.5 * UmPix[i, j])if pixk2[i, j] > 255:pixk2[i, j] = 255if pixk2[i, j] < 0:pixk2[i, j] = 0imgk[i, j, 0] = pixk[i, j]imgk[i, j, 1] = imgk[i, j, 0]imgk[i, j, 2] = imgk[i, j, 0]imgk2[i, j, 0] = pixk2[i, j]imgk2[i, j, 1] = imgk2[i, j, 0]imgk2[i, j, 2] = imgk2[i, j, 0]# 下面处理压缩0-255之间的图片max = 0min = 255for i in range(H):for j in range(W):if spixk[i, j] > max:max = spixk[i, j]if spixk[i, j] < min:min = spixk[i, j]sk = 0if max > min:sk = 255 / (max - min)for i in range(H):for j in range(W):simgk[i, j, 0] = round((spixk[i, j] - min) * sk)simgk[i, j, 1] = simgk[i, j, 0]simgk[i, j, 2] = simgk[i, j, 0]# 原图plt.subplot(3, 2, 1)plt.axis('off')plt.title('Original Image')plt.imshow(img)# 高斯平滑滤波模糊化的图像plt.subplot(3, 2, 2)plt.axis('off')plt.title('Gaussian Smooth Filter Blurring')plt.imshow(blurImg)# 像素拉伸之后的差值图像plt.subplot(3, 2, 3)plt.axis('off')plt.title('Scaled Unsharped mask(original - blur)')plt.imshow(UmImg)# 锐化并压缩的图像plt.subplot(3, 2, 4)plt.axis('off')plt.title('Sharpened Image(scaled to 0-255)')plt.imshow(simgk)# 加上钝化mask之后的锐化图像plt.subplot(3, 2, 5)plt.axis('off')plt.title('Sharpened Image(clipped to 0-255)')plt.imshow(imgk)# 设置系数为4.5之后的锐化图像plt.subplot(3, 2, 6)plt.axis('off')plt.title('Highboostted Image(k=4.5,clipped)')plt.imshow(imgk2)plt.show()

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号