基于同态滤波对光照不均匀的图像进行增强

代码如下:但是结果显示确实一片黑色的,这是怎么回事,希望大佬们,指点一下!

clear all;
% 装载图片,将yourimage换成你要处理的图片 
img= imread('D:\matlabdaima\tupian\012.jpg'); 
%img=img0(:,:,1); 
J=rgb2gray(img); 
figure,imshow(J); 
title('灰度图'); 
figure,imhist(J); 
figure,imshow(img); 
title('原始图片');
% 构造一个高斯滤波器 
f_high = 1.0; 
f_low = 0.4;
% 得到一个高斯低通滤波器 
gauss_low_filter = fspecial('gaussian', [7 7], 1.414);% 1.414
matsize = size(gauss_low_filter);
% 由于同态滤波是要滤出高频部分, 
%所以我们得把这个低通滤波器转换成一个高通滤波器.
% f_high 和 f_low 是控制这个高通滤波器形态的参数. 
gauss_high_filter = zeros(matsize);
gauss_high_filter(ceil(matsize(1,1)/2) , ceil(matsize(1,2)/2)) = 1.0;
gauss_high_filter = f_high*gauss_high_filter -(f_high-f_low)*gauss_low_filter; 
% 显示高通滤波期的频率响应 
figure,freqz2(gauss_high_filter); 
colormap(jet(64));%64
% 利用对数变换将入射光和反射光部分分开 
log_img = log(double(img)); 
% 将高斯高通滤波器与对数转换后的图象卷积 
high_log_part = imfilter(log_img, gauss_high_filter, 'symmetric', 'conv'); % 显示卷积后的图象 
figure,imshow(uint8(255*((high_log_part-1.5)/(2.4-1.5))),[]); 
title('巴特沃斯高通滤波结果'); 
% 由于被处理的图象是经过对数变换的,我们再用幂变换将图象恢复过来 
high_part = exp(high_log_part);
minv = min(min(high_part));
maxv = max(max(high_part)); 
rimg(:,:,1)=(high_part(:,:,1)-minv(1,1,1))/(maxv(1,1,1)-minv(1,1,1));
rimg(:,:,2)=(high_part(:,:,2)-minv(1,1,2))/(maxv(1,1,2)-minv(1,1,2));
rimg(:,:,3)=(high_part(:,:,3)-minv(1,1,3))/(maxv(1,1,3)-minv(1,1,3)); 
% 得到的结果图象 
figure,imshow(uint8(255*rimg)); 
title('同态滤波结果'); 
h=rgb2gray(uint8(255*rimg)); 
figure,imhist(h); 
H=medfilt2(J); %中值滤波 
figure,imshow(H);
title('中值滤波处理'); %显示中值滤波后的图像

你可能感兴趣的:(基于同态滤波对光照不均匀的图像进行增强)