同态滤波概念
同态滤波(Homomorphic filter)是信号与图像处理中的一种常用技术,它采用了一种线性滤波在不同域中的非线性映射。
同态系统:是将非线性问题,转化为线性问题处理。即对非线性(乘性)混杂信号,通过某种数学运算(如对数变换),变成加性模型,而后采用线性滤波方法进行处理。
同态滤波:是把频率滤波和空域灰度变换结合起来的一种图像处理方法,它根据图像的照度/反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。
我们可以将一幅图像分为两个分量,如下:
这两个分量分别为照射分量fi(x,y)和反射分量fr(x,y)。
其中 0<fi(x,y)<∞,0<fr(x,y)<1。fi(x,y)描述景物的照明,变化缓慢,处于低频成分。fr(x,y)描述景物的细节,变化较快,处于高频成分。
同态滤波过程,分为以下5个基本步骤:
① 原图做对数变换,得到如下两个加性分量,即
② 对数图像做傅里叶变换,得到其对应的频域表示为:
③ 设计一个频域滤波器H(u,v),进行对数图像的频域滤波。
④ 傅里叶反变换,返回空域对数图像。
⑤ 取指数,得空域滤波结果。
综上所述,得到同态滤波的基本步骤如下图:
- 参考自 图像的同态滤波原理及实现 .
获取灰度图像直方图
通过用户自己编写的获取灰度直方图,代码即注释如下:
image=imread('lena.jpg');
[M, N, D]=size(image); %获取图片长、宽以及颜色通道数
if D>1
image=rgb2gray(image); %如果颜色通道数D>1,则将彩色图像转化为灰度图
end
grayNumber=zeros(1,256); %申明1行256列的数组用于存放[0;255]的像素个数
%使用双for循环获取图像灰度值信息
for i=1:M
for j=1:N
%图像image灰度在(0-255),而grayNumber数组为(1-256)所以image(i,j)加一
grayNumber(image(i,j)+1)=grayNumber(image(i,j)+1)+1;
end
end
figure(1)
plot(grayNumber),xlim([0,256]),title("图像灰度直方图")
下面为使用matlab的内置函数来直接获取灰度图像直方图的方法:
figure(2)
imhist(image); %此时的image为灰度图
程序中所使用的图片lena.jpg为下图:
将自己编写的灰度直方图与内置函数获取灰度直方图进行对比。
用户程序获得灰度信息折线图结果:
使用函数imhist(image)直接显示直方图信息: