MATLAB图像处理 您所在的位置:网站首页 matlab锐化滤波器函数 MATLAB图像处理

MATLAB图像处理

2024-07-16 13:44| 来源: 网络整理| 查看: 265

在这里插入图片描述 一幅图像f(x,y)能够用它的入射光分量和反射光分量来表示,其关系式如下 f(x,y)=i(x,y)r(x,y) 图像f(x,y)是由光源产生的照度场i(x,y)和目标的反射系数场r(x,y)的共同作用下产生的。

该模型可作为频率域中同时压缩图像的亮度范围和增强图像的对比度的基础。 但在频率域中不能直接对照度场和反射系数场频率分量分别进行独立的操作。      如果定义: 在这里插入图片描述

则有: 在这里插入图片描述

或者 在这里插入图片描述

这里I(u,v)以及R(u,v)分别是lni(x,y)和 lnr(x,y)的傅里叶变换。 同态滤波方法就是利用上式的形式将图像中的照明分量和反射分量分开。这样同态滤波函数就可以分别作用在这两个分量上。

图像中的照明分量往往具有变化缓慢的特征,而反射分量则倾向于剧烈变化,特别在不同物体的交界处。由于这种持征,图像的自然对数的傅里叶变换的低频分量与照明分量相联系,而其高频分量则与反射分量相联系。

同态滤波处理过程如下所示: 在这里插入图片描述

同态滤波的流程图 在这里插入图片描述 同态滤波有几个参数:

rH rL c 介于rH和rL之间 D0

通过调整这几个参数达到不同的效果: 在这里插入图片描述 代码示例:

%参数声明 rH = 1; rL = 0.1; c = 0.2;%介于rH和rL之间 D0 = 0.2; image = imread('path'); [M, N] = size(image); %取对数 img_log = log(double(image) + 1); %平移到中心,判断语句代替指数计算 img_py = zeros(M, N); for i = 1:M for j= 1:N if mod(i+j, 2) == 0 img_py(i,j) = img_log(i, j); else img_py(i,j) = -1 * img_log(i, j); end end end % 对填充后的图像进行傅里叶变换 img_py_fft = fft2(img_py); %同态滤波函数 img_tt = zeros(M, N); deta_r = rH - rL; D = D0^2; m_mid=floor(M/2);%中心点坐标 n_mid=floor(N/2); for i = 1:M for j =1:N dis = ((i-m_mid)^2+(j-n_mid)^2); img_tt(i, j) = deta_r * (1-exp((-c)*(dis/D))) + rL; end end %滤波 img_temp = img_py_fft.*img_tt; %反变换,取实部,绝对值 img_temp = abs(real(ifft2(img_temp))); %指数化 img_temp = exp(img_temp) - 1; %归一化处理 max_num = max(img_temp(:)); min_num = min(img_temp(:)); range = max_num - min_num; img_after = zeros(M,N,'uint8'); for i = 1 : M for j = 1 : N img_after(i,j) = uint8(255 * (img_temp(i, j)-min_num) / range); end end subplot(1,2,1), imshow(image), title('原图像'); subplot(1,2,2), imshow(img_after), title('变换后');

效果如下: 效果图 可以看出相比于其他的图像增强的方法,同态滤波效果挺好的。

最后附上常用的二维离散傅里叶变换的Matlab实现

函数fft2 — 快速傅里叶变换 格式1:F = fft2(f) 格式2:F = fft2(f, P, Q) 函数ifft2 —快速傅里叶逆变换 格式: f = ifft2(F) 函数fftshift — 将变换的原点移动到频率矩形中心 格式:Fc =fftshift(F) 函数ifftshift — fftshift 函数的逆操作 格式:F = ifftshift(Fc)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有