• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Matlab
  • 标签: SSR  Matlab  

资源简介

《数字图像处理高级应用》中的代码,注意是单尺度的Retinex呦~

资源截图

代码片段和文件信息

clear;
close all;
% 读入图像
I = imread(‘B.jpg‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% R分量 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 取输入分量的R分量
R = I(::1);
[N1M1] = size(R);
%%%%%%%%%%%%%%%  步骤一:对图像取对数,将照射光分量和反射光分量分离%%%%%%%%%%%
% 对R分量进行数据转换,并对其取对数
R0 = double(R);
Rlog = log(R0+1);  
%%%%%%%%%%%%%%%  步骤二:用高斯模板对原图像作卷积,得到低通滤波后的图像D %%%%%%%%%%
% 对R分量进行二维傅里叶变换
Rfft2 = fft2(R0);
% 形成高斯滤波函数
sigma = 250;
F = zeros(N1M1);
for i = 1:N1
    for j = 1:M1
        F(ij) = exp(-((i-N1/2)^2+(j-M1/2)^2)/(2*sigma*sigma));
    end
end
F = F./(sum(F(:)));  % 矩阵归一化??
% 对高斯滤波函数进行二维傅里叶变换
Ffft = fft2(double(F));
% 对R分量与高斯滤波函数进行卷积运算
DR0 = Rfft2.* Ffft;
DR = ifft2(DR0);
%%%%%%%%%%%%%%%  步骤三:在对数域中,用原图像减去低通滤波后的图像,得到高频增强图像 %%%%%%%%%%
DRdouble = double(DR);
DRlog = log(DRdouble + 1);
Rr = Rlog - DRlog;
%%%%%%%%%%%%%%%  步骤四:取反对数得到增强后的图像分量 %%%%%%%%%%
EXPRr = exp(Rr);
%%%%%%%%%%%%%%%  步骤五:作对比度增强 %%%%%%%%%%
MIN = min(min(EXPRr));
MAX = max(max(EXPRr));
EXPRr = (EXPRr - MIN)/(MAX - MIN);
EXPRr = adapthisteq(EXPRr);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% G分量 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 取输入分量的G分量
G = I(::2);
[N1M1] = size(G);
%%%%%%%%%%%%%%%  步骤一:对图像取对数,将照射光分量和反射光分量分离%%%%%%%%%%%
% 对G分量进行数据转换,并对其取对数
G0 = double(G);
Glog = log(G0+1);   % ?????????????????????????加1干嘛
%%%%%%%%%%%%%%%  步骤二:用高斯模板对原图像作卷积,得到低通滤波后的图像D %%%%%%%%%%
% 对G分量进行二维傅里叶变换
Gfft2 = fft2(G0);
% 形成高斯滤波函数
sigma = 250;
for i = 1:N1
    for j = 1:M1
        F(ij) = exp( - ((i - N1/2)^2 + (j - M1/2)^2)/(2 * sigma * sigma));
    end
end
F = F./(sum(F(:)));
% 对高斯滤波函数进行二维傅里叶变换
Ffft = fft2(double(F

评论

共有 条评论