資源簡介
Retinex算法解決光照不均問題的MATLAB代碼實現,可直接運行出結果,有注釋。
(另外,代碼最后的注釋部分為利用頂帽變換方法處理光照不均問題。在本人處理的實際問題中,頂帽變換算法不理想,但Retinex算法的處理結果很好。)

代碼片段和文件信息
%
%?Retinex?補償光照不均勻
%?由于卷積時需要保證精度,應先把[0255]的unit8圖像歸一化成[0.01.0]的浮點型。
%?那么利用matlab實現步驟為:讀入圖像→歸一化→設置高斯函數參數及矩陣→高斯函數和輸入圖像矩陣卷積→取對數→和輸入圖像矩陣的對數相差→取指數→輸出圖像
name?=?[‘g-4-1.png‘];
f?=?imread(name);??
%?f=imread(‘H25.jpg‘);
fr=f(:?:?1);?fg=f(:?:?2);?fb=f(:?:?3);%RGB通道
mr=mat2gray(im2double(fr));?mg=mat2gray(im2double(fg));?mb=mat2gray(im2double(fb));%數據類型歸一化
alf1=1458;?%定義標準差alf=a^2/2??a=54
n=161;%定義模板大小?
n1=floor((n+1)/2);%計算中心?
for?i=1:n?
????for?j=1:n?
??????b(ij)?=exp(-((i-n1)^2+(j-n1)^2)/(4*alf1))/(pi*alf1);?%高斯函數
????end?
end?
nr1?=?imfilter(mrb‘conv‘?‘replicate‘);ng1?=?imfilter(mgb‘conv‘?‘replicate‘);nb1?=?imfilter(mbb‘conv‘?‘replicate‘);%卷積濾波
ur1=log(nr1);?ug1=log(ng1);?ub1=log(nb1);
tr1=log(mr);tg1=log(mg);tb1=log(mb);
yr1=(tr1-ur1)/3;yg1=(tg1-ug1)/3;yb1=(tb1-ub1)/3;
alf2=53.38;?%定義標準差alf=a^2/2????a=10.3325
x=31;%定義模板大小?
x1=floor((n+1)/2);%計算中心?
for?i=1:n?
????for?j=1:n?
??????a(ij)?=exp(-((i-n1)^2+(j-n1)^2)/(4*alf2))/(6*pi*alf2);?%高斯函數
????end?
end?
nr2?=?imfilter(mra‘conv‘?‘replicate‘);ng2?=?imfilter(mga‘conv‘?‘replicate‘);nb2?=?imfilter(mba‘conv‘?‘replicate‘);%卷積濾波
ur2=log(nr2);?ug2=log(ng2);?ub2=log(nb2);
tr2=log(mr);tg2=log(mg);tb2=log(mb);
yr2=(tr2-ur2)/3;yg2=(tg2-ug2)/3;yb2=(tb2-ub2)/3;
alf3=13944.5;?%定義標準差alf=a^2/2??a=167
l=501;%定義模板大小?
l1=floor((n+1)/2);%計算中心?
for?i=1:n?
????for?j=1:n?
??????e(ij)?=exp(-((i-n1)^2+(j-n1)^2)/(4*alf3))/(4*pi*alf3);?%高斯函數
????end?
end?
nr3?=?imfilter(mre‘conv‘?‘replicate‘);ng3?=?imfilter(mge‘conv‘?‘replicate‘);nb3?=?imfilter(mbe‘conv‘?‘replicate‘);%卷積濾波
ur3=log(nr3);?ug3=log(ng3);?ub3=log(nb3);
tr3=log(mr);tg3=log(mg);tb3=log(mb);
yr3=(tr3-ur3)/3;yg3=(tg3-ug3)/3;yb3=(tb3-ub3)/3;
dr=yr1+yr2+yr3;dg=yg1+yg2+yg3;db=yb1+yb2+yb3;
????
cr=im2uint8(dr);?cg=im2uint8(dg);?cb=im2uint8(db);
z=cat(3?cr?cg?cb);??????????
figure(1)?imshow(z)
figure(2)?imshow(f)
ibw?=?im2bw(z?graythresh(z));
figure(3);?imshow(ibw);
I2?=?imclose(ibwones(55));
figure(4);?imshow(I2);
I2?=?imopen(I2ones(55));
figure(5);?imshow(I2);
bw?=?im2bw(f?graythresh(f));
subplot(221);imshow(f);
%?title(‘原圖像‘);
subplot(223);imshow(z);
%?title(‘增強圖像‘);
subplot(222);imshow(bw);
%?title(‘原圖像二值化后的圖像‘);
subplot(224);imshow(I2);
%?title(‘增強圖像二值化后的圖像‘);
imwrite(z‘增強后.png‘);
%}
%{
%?測試頂帽變換
for?i?=?1:1
%????II?=?imread([‘C:\Documents?and?Settings\Administrator\桌面\tophat\‘?int2str(i)?‘.png‘]);?
???name?=?[‘C:\Documents?and?Settings\Administrator\桌面\tophat\g-4-1.png‘];
???II?=?imread(name);??
???I?=?rgb2gray(II);
%????name?=?[‘C:\Documents?and?Settings\Administrator\桌面\tophat\g-‘?int2str(i)?‘.png‘];
%????imwrite(II?name);
%????subplot(141);
???figure(1);
???imshow(I);
???
???thresh?=?graythresh(I);
???ibw?=?im2bw(I?thresh);
%????subplot(142);?
???figure(2);
???imshow(ibw);
???bg?=?imopen(I?strel(‘disk‘?50));
???figure(6);imshow(bg);
???Itophat?=?imsubtract(I?bg);
%????subplot(143);?
???figure(3);
???im
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????165374??2016-08-31?13:50??g-4-1.PNG
?????文件???????3479??2016-10-11?09:23??Retinex.m
-----------?---------??----------?-----??----
???????????????168853????????????????????2
- 上一篇:模糊集圖像增強matlab實現
- 下一篇:基于matlab的車牌識別與分割
評論
共有 條評論