博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab 同态滤波程序
阅读量:4123 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
49个在工作中常用且容易遗忘的CSS样式清单整理
查看>>
20种在学习编程的同时也可以在线赚钱的方法
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
12 个JavaScript 特性技巧你可能从未使用过
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(上)
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
8种ES6中扩展运算符的用法
查看>>
【视频教程】Javascript ES6 教程28—ES6 Promise 实例应用
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
【web素材】03-24款后台管理系统网站模板
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>
【JavaScript 教程】面向对象编程——实例对象与 new 命令
查看>>
我在网易做了6年前端,想给求职者4条建议
查看>>
SQL1015N The database is in an inconsistent state. SQLSTATE=55025
查看>>