图像除雾序列——非参数图像增强6

52 篇文章 6 订阅
51 篇文章 24 订阅

6 单尺度Retinex算法(文件SSR)

参考文献[3]和文献[47],图像增强效果如图9所示:

 

                                       9-(a) 原始图像            图9-(b) Land’s Single-scale Retinex

 

 9-(c) Moore’s Single-scale Retinex       9-(d) Jobson’s Single-scale Retinex

 

    图9-(e) Improved Moore’s Single-scale Retinex     图9-(f) Avarage Kernel for Single-scale Retinex

代码如下:

function [RetImg,FiltImg] = OriginalSingleScaleRetinex(Img,FiltSize,Method)
% Inputs: 
%        Img: 待处理图像
%        FiltSize: 中心\周围(Center or Surround Function)
%        Method: 滤波器的类型,不同类型对应不通的算法
% Outputs: 
%         RetImg: 光照补偿后的图像
%         FiltImg: 中心\周围(Center or Surround Function)滤波的图像
% Author: HSW
% Date: 2015/4/23
% PRIS OF HARBIN INSTITUTE OF TECHNOLOGY 
% Reference paper: 
% D.J. Jobson, Z. Rahman, and G.A. Woodell, 揚roperties and Performance of a
% Center/Surround Retinex,?IEEE Transactions on Image Processing, vol. 6, 
% no. 3, pp. 451-462, March 1997.
%

narginchk(1,3); 

if ~exist('Method','var')
    Method = 'Jobson'; 
end 
if ~exist('FiltSize','var')
    FiltSize = 15; 
end
[nrow,ncol,dims] = size(Img);
[yy,xx] = meshgrid(-(0.5*(nrow-1)):0.5*nrow,-(0.5*size(ncol-1)):0.5*size(ncol-1));
% Built filter 
if strcmp(Method,'Jobson')
    kernel = exp(-(xx.^2 + yy.^2)/(2*FiltSize*FiltSize)); 
    kernel = kernel/sum(sum(kernel));   
elseif strcmp(Method,'Land')
    kernel = 1./(1+(xx.^2 + yy.^2)/FiltSize); 
    kernel = kernel/sum(sum(kernel)); 
elseif strcmp(Method,'Moore')
    kernel = exp(-sqrt(xx.^2 + yy.^2)/FiltSize); 
    kernel = kernel/sum(sum(kernel)); 
elseif strcmp(Method,'Avag')
    kernel = 1/(nrow*ncol);  
else
    %built gaussian filter 
    kernel = exp(-(xx.^2 + yy.^2)/(2*FiltSize*FiltSize)); 
    kernel = kernel/sum(sum(kernel));  
end 
DoubleImg = Normalize8(Img,0) + 0.01; 
LogImg = log(DoubleImg); 
% 利用FFT求卷积
fftLogImg = fft2(DoubleImg); 
fftkernel = fft2(kernel,nrow,ncol); 
% fftkernel = fftshift(fftshift(fftkernel,1),2);
fftkernel = fftshift(fftkernel); 
FiltImg = ifft2(fftkernel.*fftLogImg); 
Min = min(min(FiltImg)); 
FiltImg = log(FiltImg - Min + 0.01); 
RetImg = LogImg - FiltImg; 
RetImg = Normalize8(RetImg); 

% % 直接卷积滤波
% FiltImg = ceil(imfilter(DoubleImg,kernel,'replicate','same'));
% RetImg = LogImg - log(FiltImg + (FiltImg == 0)*0.01); 
% RetImg = Normalize8(RetImg); 

end %function Original Single-scale Retinex 

function Img = Normalize8(nImg,Method)
% Inputs: 
%        nImg:待归一化图像
%        Method: = 1时代表归一化为[0,255], otherwise, 归一化为[0,1]
% Outputs: 
% 
% Author: HSW
% Date: 2015/4/23
% PRIS OF HARBIN INSTITUTE OF TECHNOLOGY 
%

if ~exist('Method','var')
    Method = 1; 
end 

nImg = double(nImg); 
Img = zeros(size(nImg)); 
[nrow,ncol,Dims] = size(nImg); 

for dims = 1:Dims
    Max = max(max(nImg(:))); 
    Min = min(min(nImg(:))); 
    if Method == 1 
        Img(:,:,dims) = ceil(((nImg(:,:,dims) - Min*ones(nrow,ncol))./(Max*ones(nrow,ncol) - Min*ones(nrow,ncol)))*255); 
    else
        Img(:,:,dims) = ((nImg(:,:,dims) - Min*ones(nrow,ncol))./(Max*ones(nrow,ncol) - Min*ones(nrow,ncol))); 
    end
end %for dims 
end %function Normalize8
参考文献:

[3] 禹晶, 徐东彬, 廖庆敏. 图像去雾技术研究进展[J]. 中国图象图形学报, 2011, 16(9):1561-1576.

[4] Jobson D J, Rahman Z, Woodell G A. Properties and performance of a center/surround retinex[J]. IEEE Transactions on Image Processing, 1997, 6(3):451-462.

[7] 吴迪,朱青松. 图像去雾的最新研究进展[J]. 自动化学报,2015,02:221-239.

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值