MATLAB图像处理_同态滤波

来源:互联网 发布:登录前映射网络驱动器 编辑:程序博客网 时间:2024/04/30 03:51
同态滤波:
利用广义叠加原理对同态系统进行滤波。
同态滤波是把频率过滤和灰度变换结合起来的一种图像处理方法,它依靠图像的照度/ 反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。使用这种方法可以使图像处理符合人眼对于亮度响应的非线性特性,避免了直接对图像进行傅立叶变换处理的失真
同态滤波的基本原理是:将像元灰度值看作是照度和反射率两个组份的产物。由于照度相对变化很小,可以看作是图像的低频成份,而反射率则是高频成份。通过分别处理照度和反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的。

同态滤波处理的基本流程如下:
S(x,y)---->Log---->DFT---->频域滤波---->IDFT---->Exp---->T(x,y)
其中S(x,y)表示原始图像;T(x,y)表示处理后的图像;Log 代表对数运算;DFT 代表傅立叶变换(实际操作中运用快速傅立叶变换FFT);IDFT 代表傅立叶逆变换(实际操作中运用快速傅立叶逆变换IFFT);Exp 代表指数运算。

下面是一张典型的同态滤波与其他图像处理方式的异同:


实现代码:

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. function I3 = test_tontai(I)  
  2.   
  3. I=double(rgb2gray(I));  
  4. [M,N]=size(I);  
  5. rL=0.5;  
  6. rH=4.7;%可根据需要效果调整参数  
  7. c=2;  
  8. d0=10;  
  9. I1=log(I+1);%取对数  
  10. FI=fft2(I1);%傅里叶变换  
  11. n1=floor(M/2);  
  12. n2=floor(N/2);  
  13. for i=1:M  
  14.     for j=1:N  
  15.         D(i,j)=((i-n1).^2+(j-n2).^2);  
  16.         H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态滤波  
  17.     end  
  18. end  
  19. I2=ifft2(H.*FI);%傅里叶逆变换  
  20. I3=real(exp(I2));  
  21. subplot(122),imshow(I3,[]);title('同态滤波增强后');  

实验发现,同态滤波有类似于高动态范围压缩的效果,比如可以把图像暗的部分提亮。


下图为原始图像,属于低曝光的一幅图像:



同态滤波后:



注:原创文章,转载请注明出处: http://blog.csdn.net/scottly1/article/details/42705271

0 0