单尺度Retinex算法学习
最近,看了幾篇論文關(guān)于retinex算法,其中包括了單尺度SSR與多尺度SSR。今天主要學(xué)習(xí)一下單尺度SSR,介紹原理及代碼,具體實(shí)驗(yàn)以后補(bǔ)上。
Retinex算法的基本內(nèi)容:圖像由亮度圖像和反射圖像構(gòu)成,分別用L(x,y)和R(x,y)表示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? I(x,y) = L(x,y)?× R(x,y)
單尺度SSR:
? ? ? ? ? ? ? ? ? ??I(x,y) = L(x,y)?× R(x,y)
? ? ? ? ? ? ? ? ? ? L(x,y) = I(x,y) * G(x,y)? ?此處的G(x,y)是高斯卷積函數(shù)
? ? ? ?將上述公式轉(zhuǎn)換至對(duì)數(shù)域:
? ? ? ? ? ? ? ? ? ?log R = log(I / L) = log I - log L= log I - log(I * G)
實(shí)驗(yàn)表明,單尺度Retinex算法可以較好地增強(qiáng)圖像。能在保持原始圖像亮度的同時(shí)壓縮圖像對(duì)比度,并增強(qiáng)圖像暗處信息。但當(dāng)圖像中有大塊灰度相似的區(qū)域時(shí),增強(qiáng)后的圖像會(huì)產(chǎn)生暈環(huán)現(xiàn)象。而這一現(xiàn)象我們可以通過雙邊濾波方法解決。
代碼來自于matlab論壇:http://www.ilovematlab.cn/thread-263388-1-1.html。
clc;clear all ; I = imread('G:\研二所有論文相關(guān)\新海霧圖\2013.8.4松花江\松花江\復(fù)件 松花江縮放\23.jpg'); figure;imshow(I,[]);title('原圖'); I=double(I); I1=I(:,:,1); I2=I(:,:,2); I3=I(:,:,3); f=double(rgb2gray(I)); %%%%%%%%%%%%%構(gòu)造高斯核%%%%%%%%%%%%%%%%%%%%%%% k1=8; k2=8; r=161; % alf=1600; % alf=161; alf=20; nn=floor((r+1)/2);??% nn=81為尺度C,取80最合適 for i=1:r? ?%從1循環(huán)到81for j=1:r %? ?? ?? ?h(i,j) =exp(-((i-nn)^2+(j-nn)^2)/(k1*alf))/(k2*pi*alf*10000);? ?? ???%高斯函數(shù)h(i,j) =exp(-((i-nn)^2+(j-nn)^2)/(2*alf^2)) ;? ?? ? %高斯函數(shù)end endh = h/sum(sum(h));%歸一化%% 把高斯濾波函數(shù)轉(zhuǎn)換到頻率域fgauss=fft2(h,size(h,1),size(h,2));? ?? ?? ?? ?? ???%對(duì)高斯濾波函數(shù)進(jìn)行傅里葉變換fgauss=fftshift(fgauss);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %將頻域中心移到零點(diǎn) fgauss = ifft2( fgauss);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %有變換為空域 %% 利用卷積函數(shù)來實(shí)現(xiàn)G(x,y)與S(x,y)的卷積效果 q1=conv2(I1,fgauss,'same');??%R通道空域?yàn)V波 這里實(shí)現(xiàn)的就是Si(x,y)卷積Gx q2=conv2(I2,fgauss,'same'); %G通道空域?yàn)V波 q3=conv2(I3,fgauss,'same');??%B通道空域?yàn)V波 q=conv2(f,fgauss,'same');??%灰度 %% 不做對(duì)比度拉伸時(shí)候的結(jié)果 這個(gè)結(jié)果偏向于藍(lán)色分量偏大的彩色圖 得到反射分量log(R(x,y)) G1 = log(I1+1)-log(q1+1); G2= log(I2+1)-log(q2+1); G3 = log(I3+1)-log(q3+1); LLLL=log(f+1)-log(q+1); GG1=exp(G1); GG2=exp(G2); GG3=exp(G3); ssr=cat(3,G1,G2,G3); ssr1=cat(3,GG1,GG2,GG3); figure,imshow(ssr); figure,imshow(uint8(ssr)); figure,imshow(ssr1); figure,imshow(uint8(ssr1)); % figure,imshow(mat2gray(uint8(ssr1))); figure;imshow(LLLL,[]);ssr=cat(3,abs(G1),abs(G2),abs(G3));??%由于有復(fù)數(shù)因此這里加abs表示只取實(shí)數(shù)部分 figure;imshow(mat2gray(ssr));? ?? ?%顯示出了增強(qiáng)效果 figure;imshow(uint8(mat2gray(ssr))); %仍然顯示全黑 %% GG1=exp(G1); GG2=exp(G2); GG3=exp(G3); ssr1=cat(3,abs(GG1),abs(GG2),abs(GG3)); figure;imshow(mat2gray(ssr1));? ?%這里也顯示了增強(qiáng)效果 但是與前面的增強(qiáng)效果差不多 figure;imshow(uint8(ssr1));? ?? ?%效果很差 很一般總結(jié)
以上是生活随笔為你收集整理的单尺度Retinex算法学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] table中给td设置宽
- 下一篇: 纯靠技术,很难进入大厂了。。。