import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#高频增强滤波器 (滤波器选择巴特沃斯高通滤波器)
def Enhance_PassFilter(image,d,n,s1):
f=np.fft.fft2(image)
fshift=np.fft.fftshift(f)
def make_transform_matrix(d):
transform_matrix=np.zeros(image.shape)
center_point=tuple(map(lambda x:(x-1)/2,s1.shape))
for i in range(transform_matrix.shape[0]):
for j in range(transform_matrix.shape[1]):
def cal_distance(pa,pb):
from math import sqrt
dis=sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)
return dis
dis=cal_distance(center_point,(i,j))
transform_matrix[i,j]=1/(1+(d/dis)**(2*n))
return transform_matrix
d_matrix=make_transform_matrix(d)
d_matrix=0.8*d_matrix+0.5
new_img=np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))
return new_img
#捕获异常
class imageSizeError(Exception):
def __init__(self):
self.value="图片大小错误"
def __str__(self):
return self.value
#矩阵减法
def decreaseArray(image1,image2):
if image1.shape==image2.shape:
image=image1.copy()
for i in range(image1.shape[0]-1):
for j in range(image1.shape[1]-1):
image[i][j]=image1[i][j]-image2[i][j]
return image
else:
raise imageSizeError()
#矩阵加法
def increaseArray(image1,image2):
if image1.shape==image2.shape:
image=image1.copy()
for i in range(image1.shape[0]-1):
for j in range(image1.shape[1]-1):
image[i][j]=image1[i][j]+image2[i][j]
return image
else:
raise imageSizeError()
def put(path):
img=cv2.imread(path,1)
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
f=np.fft.fft2(img)
fshift=np.fft.fftshift(f)
#取绝对值后将复数变化为实数(取对数的目的是将数据变换到0~255)
s1=np.log(np.abs(fshift))
plt.subplot(231)
plt.axis('off')
plt.title('原始图像')
plt.imshow(img, cmap='gray')
plt.subplot(232)
plt.axis('off')
plt.title('高频增强滤波10')
butter_100_1 = Enhance_PassFilter(img, 30, 1, s1)
plt.imshow(butter_100_1, cmap='gray')
#高频提升滤波
imageAver3=cv2.blur(img,(3,3))#线性平滑滤波
unsharpMask=decreaseArray(img,imageAver3)#非锐化掩模
imageSharp=increaseArray(img,unsharpMask)#将模板加到原图像
plt.subplot(233)
plt.axis('off')
plt.title('3×3平滑滤波结果图像')
plt.imshow(imageAver3,cmap='gray')
plt.subplot(234)
plt.axis('off')
plt.title('非锐化掩模')
plt.imshow(unsharpMask,cmap='gray')
plt.subplot(235)
plt.axis('off')
plt.title('高频提升滤波结果')
plt.imshow(imageSharp,cmap='gray')
plt.savefig('C:/Users/xpp/Desktop/result.png')
plt.show()
put(r'C:/Users/xpp/Desktop/Lena.png')
算法:特殊高通滤波器包括高频增强滤波器和高频提升滤波器。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!