本文共 3120 字,大约阅读时间需要 10 分钟。
代码1:
img_hazy = imread(['images/',image_name,'_input.png']);
img1=img_hazy(:,:,1); img2=img_hazy(:,:,2); img3=img_hazy(:,:,3); %同台滤波程序 figure,imshow(img1); title('Original Image1'); figure,imshow(img2); title('Original Image2'); figure,imshow(img3); title('Original Image3'); % 构造一个高斯滤波器 f_high = 1.0; f_low = 0.4; % 得到一个高斯低通滤波器 gauss_low_filter = fspecial('gaussian', [7 7], 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)); % 利用对数变换将入射光和反射光部分分开 log_img1 = log(double(img1)); log_img2 = log(double(img2)); log_img3 = log(double(img3)); % 将高斯高通滤波器与对数转换后的图象卷积 high_log_part1 = imfilter(log_img1, gauss_high_filter, 'symmetric', 'conv'); high_log_part2 = imfilter(log_img2, gauss_high_filter, 'symmetric', 'conv'); high_log_part3 = imfilter(log_img3, gauss_high_filter, 'symmetric', 'conv'); % 显示卷积后的图象 % figure,imshow(high_log_part1); % title('High Frequency Part1'); % figure,imshow(high_log_part2); % title('High Frequency Part2'); % figure,imshow(high_log_part3); % title('High Frequency Part3'); % 由于被处理的图象是经过对数变换的,我们再用幂变换将图象恢复过来 high_part1 = exp(high_log_part1); high_part2 = exp(high_log_part2); high_part3 = exp(high_log_part3); minv1 = min(min(high_part1)); maxv1 = max(max(high_part1)); minv2 = min(min(high_part2)); maxv2 = max(max(high_part2)); minv3 = min(min(high_part3)); maxv3 = max(max(high_part3)); % 得到的结果图象 imm1=(high_part1-minv1)/(maxv1-minv1); imm2=(high_part2-minv2)/(maxv2-minv2); imm3=(high_part3-minv3)/(maxv3-minv3); figure,imshow(imm1); title('Result Image1'); figure,imshow(imm2); title('Result Image2'); figure,imshow(imm3); title('Result Image3'); img_hazy=cat(3,imm1,imm2,imm3); figure,imshow(img_hazy); title('imghazy Image');代码2:
clear;
close all;
[name,path] = uigetfile('lena.bmp');
file = strcat(path,name);
[X,map]=imread(file);
X=double(X);
I=rgb2hsv(X);
H=I(:,:,1);
S=I(:,:,2);
V=I(:,:,3);
%if size(X,3)==3
% X= rgb2gray(X);
%end
% 装载图片
% 显示这个图片
figure,imshow('lena.bmp');
title('原始图像');
% 构造一个高斯滤波器
f_high = 1.0;
f_low = 0.8;
% 得到一个高斯低通滤波器
gauss_low_filter = fspecial('gaussian', [7 7], 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;
% 利用对数变换将入射光和反射光部分分开
log_img = log(double(V)+eps);
% 将高斯高通滤波器与对数转换后的图象卷积
high_log_part = imfilter(log_img, gauss_high_filter, 'symmetric', 'conv');
% 由于被处理的图象是经过对数变换的,再用幂变换将图象恢复过来
high_part = exp(high_log_part);
minv = min(min(high_part));
maxv = max(max(high_part));
% 得到的结果图象
temp=(high_part-minv)/(maxv-minv);
S=adapthisteq(S)*2.1;
HSV3(:,:,1)=H; %保留H不变,开始合成
HSV3(:,:,2)=S;
HSV3(:,:,3)=temp;
rgb2=hsv2rgb(HSV3); %转换回RGB空间
figure;
imshow(rgb2);
title('同态滤波图像');
转载地址:http://vklpi.baihongyu.com/