灰度世界 matlab,灰度世界算法(Gray World Algorithm)和White Patch Retinex算法
人的視覺系統具有顏色恒常性,能從變化的光照環境和成像條件下獲取物體表面顏色的不變特性,但成像設備不具有這樣的調節功能,
不同的光照環境會導致采集的圖像顏色與真實顏色存在一定程度的偏差,需要選擇合適的顏色平衡(校正)算法,消除光照環境對顏
色顯現的影響?;叶仁澜缢惴ㄊ亲畛S闷胶馑惴?。
一、灰度世界算法
灰度世界算法以灰度世界假設為基礎,該假設認為:對于一幅有著大量色彩變化的圖像,
?,?三個分量的平均值趨于同一灰度值
。?從物理意義上講,灰色世界法假設自然界景物對于光線的平均反射的均值在總體上是個定值,這個定值近似地為“灰色”。?顏色平衡算法將這一假設強制應用于待處理圖像,可以從圖像中消除環境光的影響,獲得原始場景圖像。
算法執行步驟:
(1)一般有兩種方法確定
?:
要么取固定值(如最亮灰度值的一半,八位顯示的話即為128); 要么通過計算圖像
?三通道平均值?
?,取?
;
(2)計算
?三個通道的增益系數:?
?;?
?;?
?;
(3)根據Von Kries對角模型,對于圖像中的每個像素
?,調整其分量?
?分量:
這種算法簡單快速,但是當圖像場景顏色并不豐富時,尤其出現大塊單色物體時,該算法常會失效。
注?:Von Kries提出,可用一個對角矩陣變換描述兩種光照條件下同一物體表面顏色間的關系。假定在光照
?下感知
到的物體
?值分別為?
?、?
?,?根據Von Kries對角理論有:
該理論實現不同光源間的轉換。
二、Matlab實現
I=imread('N.jpg');
y=GrayWorld(I);
figure(1);imshow(I);
figure(2);imshow(y);
function y=GrayWorld(Image)
r=Image(:,:,1);
g=Image(:,:,2);
b=Image(:,:,3);
avgR = mean(mean(r));
avgG = mean(mean(g));
avgB = mean(mean(b));
avgRGB = [avgR avgG avgB];
grayValue = (avgR + avgG + avgB)/3
scaleValue = grayValue./avgRGB;
newI(:,:,1) = scaleValue(1) * r;
newI(:,:,2) = scaleValue(2) * g;
newI(:,:,3) = scaleValue(3) * b;
y=newI;
三、具體數學推導過程。
算法:
(0)圖像成像模型
White Patch Retinex算法的目的是恢復圖像的本身色彩,這勢必就要估計圖像中外界光源的強度。下面是圖像成像的數學表達式:
(1)
式中,
是圖像成像的幾何尺寸因子,
是物體在
位置處對波長
的光的反射系數(反射系數的大小,直接決定成像的亮度),
是光源的強度,
是照相機的感光系數。最終的成像為
,其中
與
是相互對應的關系,前者是圖像中的位置,后者是實際物體的位置。
一般RGB照相機的感光材料僅對r,g,b三個顏色反應,即
由三個窄帶波長組成。假設
是delta函數,那么(1)式可以簡化為:
?(2)
圖像成像模型到此結束。我們接下來的任務就是估計光源強度
。
(1)基本算法
下式是圖像成像的數學表達
依然假設像素的色彩和像素的亮度值成比例
。
按照Gray World假設,對
取平均,則有
且?
式中E(R) = 1/2即是由Gray World假設得出,帶入后得到:
依然假設E(G)=1,那么光源的強度可以估計為:
(1)
最終經過色彩恢復后的圖像為:
(2)
(2)改進算法
上述的原始算法具有很大的局限性。若圖像的顏色比較單一,那么就不再滿足gray world假設。為解決這個問題,提出了一些改進的算法,其中的一種主要思路是,先對圖像進行分割,然后求分割后每塊圖像的顏色均值,進而求出總的顏色均值。用數學可以表示為下式:
式中,nr為分割后區域的個數,a(Rj)為第j個區域的平均像素值。通過這種方法求得最終的ai帶入式(1)中。
在這種思想下,提出了一種具體的算法,該算法求三個通道的直方圖,然后將其量化為10類,那么最終可以將256*256*256中顏色量化為10*10*10=1000種顏色,書中將這1000種類描述為1000 buckets。(直觀的理解就是把整幅圖像畫一個直方圖,該直方圖有1000個柱,也就是1000個bucket)。
最終的求ai的式子為:
式中,nnz為直方圖中像素點個數非0的bucket的個數,nb為bucket的總個數(按照書中的意思,nb =1000,我的理解是nb = nnz),ci(j)為第j個bucket中像素的值。
同樣的,將求得的ai帶入式(1)中,然后帶入式(2)求得恢復后的輸出。
總結
以上是生活随笔為你收集整理的灰度世界 matlab,灰度世界算法(Gray World Algorithm)和White Patch Retinex算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2932):vue中的v-if
- 下一篇: 安全态势感知产品对比_设计中的对比和人的