频域图像增强-锐化

     图像增强技术根据增强处理过程所在的空间不同,可分为基于频域的算法和基于空域的算法两大类。基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法,把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。

     图像锐化主要影响图像中的低频分量,不影响图像中的高频分量。图像锐化的主要目的有两个:

1.增强图像边缘,使模糊的图像变得更加清晰,颜色变得鲜明突出,图像的质量有所改善,产生更适合人眼观察和识别的图像;

2.希望通过锐化处理后,目标物体的边缘鲜明,以便于提取目标的边缘、对图像进行分割、目标区域识别、区域形状提取等,进一步的图像理解与分析奠定基础。

图像锐化一般有两种方法:

1.微分法

2.高通滤波法

常用的微分锐化方法如:梯度锐化和拉普拉斯锐化。

     邻域平均法或加权平均法可以平滑图像,反过来利用对应的微分算法可以锐化图像。微分算法是求信号的变化率,有加强高频分量作用,从而使图像轮廓清晰。对图像进行逆运算如微分运算,从而使图像清晰化。在图像处理中,一阶微分是通过梯度算法来实现的,对于一幅图像用函数f(x,y)表示,定义在f(x,y)在点(x,y)处的梯度是一个矢量,梯度的方向在函数f(x,y)最大变化率的方向上,梯度的幅度G[f(x,y)]可以由以下公式算出:

    对于图像而言,物体与物体之间,背景与背景之间的梯度变化很小,灰度变化较大的地方一般集中在图像的边缘上,也就是物体和背景交接的地方。当我们设定一个阈值时,G[f(i,j)]大于阈值就认为该像素点处于图像的边缘,对结果加上常数C,以使边缘变亮;而对于G[f(i,j)]不大于阈值就认为该像素点为同类像素,即同为物体或同为背景,常数C的选取可以根据具体的图像特点。这样既增亮了图像的边界,同时又保留了图像背景原来的状态,比传统的梯度锐化具有更好的增强效果和适用性。

 


      傅里叶变换的目的并不是为了观察图像的频率分布(至少不是最终目的),更多情况下是为了对频率进行过滤,通过修改频率以达到图像增强、图像去噪、边缘检测、特征提取、压缩加密等目的。

     过滤的方法一般有三种:低通(Low-pass)、高通(High-pass)、带通(Band-pass)。,

     高通滤波器是指通过高频的滤波器,衰减低频而通过高频,常用于增强尖锐的细节,但会导致图像的对比度会降低。该滤波器将检测图像的某个区域,根据像素与周围像素的差值来提升像素的亮度。图展示了“Lena”图对应的频谱图像,其中心区域为低频部分。

低通滤波

      低通滤波器是指通过低频的滤波器,衰减高频而通过低频,常用于模糊图像。可以把过滤器想象成一张渔网,想要低通过滤器,就是将高频区域的信号全部拉黑,而低频区域全部保留。低通滤波器与高通滤波器相反,当一个像素与周围像素的差值小于一个特定值时,平滑该像素的亮度,常用于去燥和模糊化处理。如PS软件中的高斯模糊,就是常见的模糊滤波器之一,属于削弱高频信号的低通滤波器。

    下图展示了“Lena”图对应的频谱图像,其中心区域为低频部分。如果构造低通滤波器,则将频谱图像中心低频部分保留,其他部分替换为黑色0,其处理过程如图所示,最终得到的效果图为模糊图像。

                               
 滤波图像是通过低通滤波器和频谱图像形成。其中低通滤波器中心区域为白色255,其他区域为黑色0。

                                 

低通后结果:

                                     

 

高通滤波法

      一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现,为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘、轮廓线以及图像的细节变得清晰。

     从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的信噪比否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理

     与低通滤波器相反,采用高通滤波让高频分量顺利通过,并适当抑制中低频分量,使图像的细节变得清楚,实现图像的锐化,但会导致图像的对比度会降低。该滤波器将检测图像的某个区域,根据像素与周围像素的差值来提升像素的亮度。图展示了“Lena”图对应的频谱图像,其中心区域为低频部分。

                               

接着通过高通滤波器覆盖掉中心低频部分,将255两点变换为0,同时保留高频部分,其处理过程如下图所示。

                                                  
通过高通滤波器将提取图像的边缘轮廓,生成如下图所示图像。

                                         

 

# -*- coding: utf-8 -*-
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

#读取图像
img = cv.imread('Lena.png', 0)

#傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

#设置高通滤波器
rows, cols = img.shape
crow,ccol = int(rows/2), int(cols/2)
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0

#傅里叶逆变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)

#显示原始图像和高通滤波处理图像
plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image')
plt.axis('off')
plt.subplot(122), plt.imshow(iimg, 'gray'), plt.title('Result Image')
plt.axis('off')
plt.show()

from:https://blog.csdn.net/Eastmount/article/details/89645301

高频提升滤波器

 将高通滤波器提取的高频部分加到原图上,从而强化图像的边缘信息,达到锐化图像的效果。 
这里写图片描述 
这里写图片描述

clc
clear
f=imread('orig_chest_xray.tif'); %读入图像
subplot(2,2,1);
imshow(f)
title('原始图像')   
%高斯高通滤波
I=double(f);
g=fft2(I);
g=fftshift(g);
[M,N]=size(g);
D0=40;
m=fix(M/2);n=fix(N/2);
for i=1:M
       for j=1:N
           D=sqrt((i-m)^2+(j-n)^2);
           H=exp(-(D.^2)./(2*(D0^2)));   
           result(i,j)=(1-H)*g(i,j);
       end
end
result=ifftshift(result);
J1=ifft2(result);
J2=uint8(real(J1));
subplot(2,2,2);
imshow(J2)
title('高斯高通滤波后的图像')

%高频强调滤波
F=0.5+0.75*(1-H);
G=F*g;
result2=ifftshift(G);
J3=ifft2(result2);
J4=uint8(real(J3));
subplot(2,2,3)
imshow(J4)
title('高频强调滤波后的图像')

%对高频强调滤波后图像进行直方图均衡化
J5=histeq(J4,256);
J5=uint8(J5);
subplot(2,2,4);
imshow(J5)
title('直方图均衡化后的图像')

 运行结果:

       

from:https://blog.csdn.net/learning_tortosie/article/details/80030528

   将高频加强和直方图均衡相结合是得到边缘锐化和对比度增强的有效方法。应先进行高频加强,再进行直方图均衡化

   高频加强是针对通过高通滤波后的图像整体偏暗,因此通过提高平均灰度的亮度,使图像的视觉鉴别能力提高。再通过直方图均衡化将图像的窄带动态范围变为宽带动态范围,从而达到提高对比度的效果。若先进行直方图均衡化,再进行高频加强,对于图像亮度呈现较强的两极现象时,例如多数像素主要分布在极暗区域,而少数像素存在于极亮区域时,先直方图均衡化会导致图像被漂白,再进行高频加强,获得的图像边缘不突出,图像的对比度较差。

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用NumPy和OpenCV库对图像进行傅里叶变换,并通过去除高频噪声来实现去噪效果。 首先,通过使用OpenCV库加载要处理的图像,并将其转换为灰度图像。然后,我们可以使用NumPy的傅里叶变换函数(`numpy.fft.fft2()`)对图像进行二维傅里叶变换。 在得到傅里叶频谱后,我们可以通过阈值过滤或者使用低通滤波器来去除高频噪声。对于阈值过滤,只需将频谱中低于某个阈值的部分置为零即可。对于低通滤波器,可以使用一个合适的滤波器(如高斯滤波器)对频谱进行平滑处理。 完成滤波后,我们可以通过NumPy的傅里叶逆变换函数(`numpy.fft.ifft2()`)将傅里叶频谱转换回空域图像。最后,使用OpenCV库将结果图像保存或显示出来。 下面是一个简单的示例代码: ```python import cv2 import numpy as np # 加载图像并转为灰度图像 image = cv2.imread('image.jpg', 0) # 进行二维傅里叶变换 f = np.fft.fft2(image) # 频谱平移,将低频部分移到图像中心 fshift = np.fft.fftshift(f) # 设置阈值,将低于阈值的频率部分置为零 threshold = 100 fshift[np.abs(fshift) < threshold] = 0 # 频谱逆平移,将低频部分恢复到原始位置 f_ishift = np.fft.ifftshift(fshift) # 进行傅里叶逆变换,得到去噪后的图像 restored_image = np.abs(np.fft.ifft2(f_ishift)) # 将图像转为整数类型 restored_image = np.uint8(restored_image) # 显示和保存去噪后的图像 cv2.imshow('Restored Image', restored_image) cv2.waitKey(0) cv2.destroyAllWindows() cv2.imwrite('restored_image.jpg', restored_image) ``` 上述代码首先加载图像并转换为灰度图像,之后进行二维傅里叶变换。然后,根据设定的阈值阈值过滤频谱,然后进行傅里叶逆变换得到去噪后的图像。最后,通过OpenCV库显示和保存去噪后的图像。 需要注意的是,阈值的选择是一个重要的参数,需要根据具体情况进行调节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值