同态滤波
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§4.4 同态滤波
在生活中会得到这样的图像,它的动态范围很大,而我们感兴趣的部分的灰度又很暗,图像细节没有办法辨认,采用一般的灰度级线性变换法是不行的。图像的同态滤波属于图像频率域处理范畴,其作用是对图像灰度范围进行调整,通过消除图像上照明不均的问题,增强暗区的图像细节,同时又不损失亮区的图像细节.
4.4.1 同态滤波法
下面介绍同态滤波法。 (,)f x y :
一般自然景物的图像(,)f x y 可由照明函数(,)i f x y 和反射函数(,)r f x y 的乘积表示。(,)i f x y 描述景物的照明,与景 物无关;(,)r f x y 包含景物的细节,与照明无关。
(,)(,)(,)
0(,); 0(,)1i r i r f x y f x y f x y f x y f x y =⋅<<∞<<
由于二者相乘,无法变换到频域再分开处理,故如下处理:
ln :
对上式取对数
[]ln (,)ln (,)(,)ln (,)ln (,)i r i r f x y f x y f x y f x y f x y =⋅=+
使在空间域变成相加关系,
FFT :
对上式取傅氏变换
[]ln ,ln ,ln (,)ln (,)ln (,)(,)(,)i r i r F u v F f x y f x y F u v F u v =+=+ ,ln (,)i F u v : 照明函数在空间上变化缓慢,其频谱特性集中在低频段,; ,ln (,)r F u v : 反射函数的频谱集中在高频段(景物本身具有较多的细节和边缘),反射函数描述的景物,反映图像的细节内容,其频率处于高频区域。
(,)H u v :假如图像照明不均,则图像上各部分的平均亮度会有起伏。对应于暗区的图像细节结构就较难分辨,需要消除这种不均匀性。可以压缩照明函数的灰度范围,也就是在频域上削弱照明函数的成分,同时增强反射函数的频谱成分,就可以增加反映图像对比度的反射函数的对比度。结果,使图像上暗区图像细节得以增大,并尽可能大的保持亮区的图像细节。
由乘上传递函数,
低频段被压缩,而高频段却扩展了。 (,)()H u v −−同态滤波器
ln ln ,ln ,ln ,ln ,ln (,)(,)(,)
(,)(,)(,)(,(,)(,)
i r i r G u v F u v H u v F u v H u v F u v H u v G u v G u v =⋅=⋅+⋅=+)
-1FFT :求傅里叶反变换,得在对应空间域表达式
{}{}{111ln ,ln ,ln (,)(,)(,)i r }F G u v F G u v F G u v −−−=+ exp {}{}1ln (,)exp (,)g x y F G u v −=
根据不同的图像特性和需要,选用不同的(,)H u v ,可得到满意的结果。 总之,细节对比度差,分辨不清的图像用同态滤波器处理后,图像画面亮度比较均匀,细节得以增强。
4.4.2 光照不均匀的MATLAB 简单处理[4]
I=imread('D:\MatLab\toolbox\images\imdemos\rice.tif');
I=im2double(I);
subplot(3,2,1),imshow(I); %IM2DOUBLE Convert image to double precision title('rice.tif')
bg32=blkproc(I,[32,32],'min(x(:))');
% B = BLKPROC(A,[M N],FUN) processes the image A by applying the function % FUN to each distinct M-by-N block of A, padding A with zeros if
% necessary. FUN is a function that accepts an M-by-N matrix, X, % and returns a matrix, vector, or scalar Y:
subplot(3,2,2),surf(bg32);
% SURF(X,Y ,Z,C) plots the colored parametric surface defined by % four matrix arguments.
title('surf for image block');
%% 估计图像背景的照度,通过取32×32大小图像块中的最小值做图像背景的照度。
%% 用blkpoc函数加快运算速度。
bg256=imresize(bg32,[256,256],'bicubic');
% IMRESIZE resizes an image of any type using the specified interpolation method.
% B = IMRESIZE(A,[MROWS MCOLS],METHOD) returns an image of size
% MROWS-by-MCOLS.
subplot(3,2,3),imshow(bg256);
title('total background')
%% 将粗略估计的背景矩阵扩展成与原始图像大小相同的矩阵,这是通过双三次插值%%实现。
II=I-bg256;
subplot(3,2,4),imshow(II);
title('de-background image')
%% 从原图像中减去估计出的背景图像以消去照度不均匀的影响,但使图像变暗。
III=imadjust(II,[0,max(II(:))],[0,1]);
% J = IMADJUST(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT]) maps the
% values in intensity image I to new values in J such that values between
% LOW_IN and HIGH_IN map to values between LOW_OUT and HIGH_OUT. Values % below LOW_IN and above HIGH_IN are clipped; that is, values below LOW_IN
% map to LOW_OUT, and those above HIGH_IN map to HIGH_OUT. You can use an % empty matrix ([]) for [LOW_IN; HIGH_IN] or for [LOW_OUT; HIGH_OUT] to
% specify the default of [0 1]. If you omit the argument, [LOW_OUT;
% HIGH_OUT] defaults to [0 1].
subplot(3,2,5),imshow(III);
title('adjusted imagebintensitybvalue')
%% 通过指定图像的灰度范围,调整图像灰度。