天天看點

MATLAB圖像處理_去霧算法

使用MATLAB進行圖像的去霧操作,網上一搜,這方面的東西很多,貌似已然成為研究的一個方向,大牛輩出!

這裡僅僅給出一個代碼,能實作圖像的去霧操作,詳細的看後邊有沒有時間,想自己研究研究。

function darktest(filename)
%暗影去霧算法
%filename------檔案名或檔案絕對路徑
%用法:darktest('7.png')
close all
clc

w0=0.65;   %0.65  乘積因子用來保留一些霧,1時完全去霧    
t0=0.1;

I=imread(filename);
figure;
set(gcf,'outerposition',get(0,'screensize'));
subplot(221)
imshow(I);
title('原始圖像');
[h,w,s]=size(I);
min_I=zeros(h,w);           

%下面取得暗影通道圖像
for i=1:h                 
    for j=1:w
        dark_I(i,j)=min(I(i,j,:));
    end
end

subplot(223)
imshow(dark_I);
title('dark channnel的圖形');

Max_dark_channel=double(max(max(dark_I)))  %天空亮度
dark_channel=double(dark_I);
t=1-w0*(dark_channel/Max_dark_channel);   %取得透謝分布率圖

subplot(224)
T=uint8(t*255);
imshow(T);
title('透射率t的圖形');

t=max(t,t0);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I1=double(I);
J(:,:,1) = uint8((I1(:,:,1) - (1-t)*Max_dark_channel)./t);

J(:,:,2) = uint8((I1(:,:,2) - (1-t)*Max_dark_channel)./t);

J(:,:,3) =uint8((I1(:,:,3) - (1-t)*Max_dark_channel)./t);
subplot(222)
imshow(J);
title('去霧後的圖像');

end
           

繼續閱讀