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

数字图像处理——⾮锐化屏蔽与⾼提升滤波【像素级别处理】(python )数字图像处理——⾮锐化屏蔽与⾼提升滤波【像素级别处理】(python )⽂章⽬录
⾮锐化屏蔽
介绍
其中⾮锐化屏蔽是指在原图像中减去⼀个经过锐化的图层
其步骤为:
1. 模糊原图像
2. 原图像减去模糊图像(差值为模版)
3. 把模版加到原图像上
令为模糊图像
⾸先我们可以得到模版
然后在原图像加上模版的⼀个权重k(k>0):
当k=1时,所得的为⾮锐化屏蔽
⾼提升滤波
介绍
其中⾮锐化屏蔽是指在原图像中加上⼀个经过锐化的图层
其步骤为:
1. 模糊原图像
2. 原图像减去模糊图像(差值为模版)
3. 把模版加到原图像上
令为模糊图像
⾸先我们可以得到模版
然后在原图像加上模版的⼀个权重k(k>0):
当k>1时,为⾼提升滤波
代码实现
import  cv2
import  numpy as  np
import  matplotlib .pyplot as  plt
img = cv2.imread ('Fig0340.tif')  # 测试图⽚
H = img .shape [0]
W = img .shape [1]
#  产⽣5*5的Gaussian smoothing filter
(x ,y )f g (x ,y )=mask f (x ,y )−(x ,y )
f g (x ,y )=f (x ,y )+k ∗(x ,y )
f (x ,y )f
g (x ,y )=mask f (x ,y )−(x ,y )
f g (x ,y )=f (x ,y )+k ∗(x ,y )
f
# Σ=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 -2
y = j -2
h[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 =0
for 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 mask
UmPix = np.zeros((H, W), np.int32)
max=0
min=255
for 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 =0
if 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之间的加⼊钝化掩蔽的图像
# 压缩⾄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]=255
if pixk[i, j]<0:
pixk[i, j]=0
pixk2[i, j]=round(img[i, j,0]+4.5* UmPix[i, j]) if pixk2[i, j]>255:
pixk2[i, j]=255
if pixk2[i, j]<0:
pixk2[i, j]=0
imgk[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=0
min=255
for 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 =0
if 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.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()

本文发布于:2024-09-20 14:19:04,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/89282.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   锐化   模版   滤波   提升
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议