2016-08-20 169 views
0

我對均衡彩色圖像感興趣。根據this的文章,我所做的是從RGB圖像開始並將其轉換爲YIQ值。之後,我可以通過考慮由Y給出的亮度水平來獲得圖像的灰度版本。對該灰度圖像應用算法,可以得到原始圖像的灰度版本的或多或少的均衡版本。我想生成一個新的RGB圖像,保留原始圖像的顏色並校正亮度值,以獲得原始圖像的亮度均衡的RGB版本。在不改變顏色的情況下更改圖像亮度

首先,我嘗試將YIQ值轉換回RGB,但考慮到Y均衡後的修改值。通過這種方法,我得到了[0,1]以外的RGB值。

因爲這第一種方法不起作用,我試圖用相對成功的程度來做以下事情。對於每個像素,如果Y'是均衡後的亮度水平,並且Y是原始亮度值,則我考慮由R'=(Y'/ Y)R,G'=(Y'/ Y)G給出的新RGB值和B'=(Y'/ Y)B。也就是說,我增加了RGB分量分佈中的亮度等級保持比例。

即使第二種方法奏效,我仍然存在這樣的問題,即原始圖像中的一些顏色在均衡之後看起來不同。取決於原始圖像,這種效果或多或少是可以理解的。我的問題是,在校正亮度值的情況下,將原始RGB圖像轉換爲新圖像的顏色保存方法是什麼?請注意,在第二種方法(btw,唯一一個工作),我必須用公式中的(Y'/ Y)替換(Y'/ Y)和(1)中最大值之間的最小值/ R),(1/G)和(1/B),所以在任何組件中我都不會超過1。當然,這是另一個缺點,因爲對於某些像素,我無法獲得在灰度均衡步驟中計算的亮度級別。

+0

我沒有完全理解爲什麼第一種方法不起作用?均衡的Y值在[0,1]之間,並且在使用新的Y和舊的I和Q之後,您獲得的RGB磨砂值大於1? –

+0

@AmitayNachmani是或低於零。但是,如果你仔細想想,它確實有道理。三個值RGB用於計算每個YIQ值。如果修改Y得到Y',只要這個新值Y'是Y'IQ可能由某些有效的RGB座標生成的,就可以返回有效的RGB座標。 – ORerwannabe

+0

是的,你是對的我的壞。 –

回答

0

你不會提起你的操作系統,你的軟件環境,也不提供任何圖像,所以我會建議一個在命令行使用ImageMagick的選項。它安裝在大多數Linux發行版上,並且可用於OSX和Windows,也可以使用Python,PHP,Perl,Java和C/C++綁定。

所以,我想你想是這樣的:

convert input.jpg -colorspace YIQ -channel R -equalize +channel -colorspace RGB result.jpg 

,說... 「轉換圖像input.jpg到YIQ色彩空間,那麼只有第一個通道上運行(R聲道其爲Y這裏) ,均衡該通道,現在恢復使用全部3個通道並返回RGB色彩空間並保存爲result.jpg

+0

我在Fedora上使用Python與SciPy。我非常感謝你的回答,事實上,我將用它來比較我的算法得到的結果。但是,我必須自己做,理解轉換過程中發生了什麼。我只需要一些聰明的方法回去,同時保持rgb的相對等級或類似的東西。 – ORerwannabe

0

您可以執行從當前範圍到[0,1]範圍的線性轉換。 比方說現在轉換從Y'IQ回後的綠色通道是[GMIN,GMAX]然後所有值映射回[0,1]範圍內使用以下線性映射(根據此答案answer):

NewValue = ((OldValue - gMin)/(gMax - gMin)) 

對所有通道R,G,B都這樣做。

相關問題