專利名稱:一種高效的圖像色彩抑制方法
技術領域:
本發(fā)明屬于視頻及圖像處理技術,具體涉及一種高效的圖像色彩抑制方法。
背景技術:
RGB色彩模式是工業(yè)界的一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色 通道的變化以及它們相互之間的疊加來得到各式各樣的顏色,RGB即是代表紅、綠、藍三個 通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色 系統(tǒng)之一。RGB色彩模式使用RGB模型為圖像中每一個像素的RGB分量分配一個0 255 范圍內的強度值。例如純紅色R值為255, G值為0, B值為0 ;灰色的R、 G、 B三個值相等 (除了 0和255);白色的R、G、B都為255 ;黑色的R、G、B都為0。 RGB圖像只使用三種顏色, 就可以使它們按照不同的比例混合,在屏幕上重現(xiàn)16777216種顏色。 HSV/HSL色彩模式也分別是工業(yè)界的一種顏色標準,是通過對色調(H)、飽和度 (S)、亮度(L)或明度(V)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的 顏色。HSV/HSL及代表了三個通道的顏色,圖像只使用三種通道,也可以使它們按照不同的 比例混合,在屏幕上重現(xiàn)16777216種顏色。 在圖像/視頻處理技術中,經(jīng)常有將一類顏色抑制下去(去掉)的需求,從而實現(xiàn) 圖像的優(yōu)化,得到較為理想的色彩效果。實現(xiàn)這種需求的方法很多,一般來說都需要將RGB 空間變換到HSV/HSL空間中去處理,很少有在RGB空間直接處理的。現(xiàn)有的方法往往都比 較耗時間,資源占用也比較嚴重。尤其是在HSV/HSL空間抑色的方法,大量時間都耗費在從 RGB到HSV/HSL空間的變換上,非常影響色彩抑制的處理效率。
發(fā)明內容
本發(fā)明的目的在于針對現(xiàn)有技術的缺陷,提供一種直接工作在RGB空間的圖像色 彩抑制方法,以提高圖像色彩抑制的效率。 本發(fā)明的技術方案如下一種高效的圖像色彩抑制方法,該方法在RGB空間中對 原始圖像進行操作,包括對紅、綠、藍、青、品紅和黃六種顏色進行抑制,針對所需抑制的顏 色,判斷每個像素點中對應的色彩通道的基色值是否為該像素點的red、 green、 blue中的 最大值或最小值,然后,根據(jù)判斷的結果,對符合條件的像素點進行色彩值的修訂,得到目 標圖像像素點的色彩值。 進一步,如上所述的高效的圖像色彩抑制方法,其中, 針對紅色抑制,判斷每個像素點中的red值是否為該像素點的red、green、blue中 的最大值,如果是,將該像素點的red值修改為其余兩個色彩值green、blue中較大的值;如 果不是,則對該像素點不做處理; 針對綠色抑制,判斷每個像素點中的green值是否為該像素點的red、green、blue 中的最大值,如果是,將該像素點的green值修改為其余兩個色彩值red、blue中較大的值; 如果不是,則對該像素點不做處理;
3
針對藍色抑制,判斷每個像素點中的blue值是否為該像素點的red、 green、 blue 中的最大值,如果是,將該像素點的blue值修改為其余兩個色彩值red、green中較大的值; 如果不是,則對該像素點不做處理; 針對青色抑制,判斷每個像素點中的red值是否為該像素點的red、 green、 blue 中的最小值,如果是,用其余兩個色彩值green、blue中較小的值減去red值得到差值t,然 后,用色彩值green、blue分別減去差值t,得到新的色彩值green、blue ;如果不是,則對該 像素點不做處理; 針對品紅抑制,判斷每個像素點中的green值是否為該像素點的red、green、blue 中的最小值,如果是,用其余兩個色彩值red、blue中較小的值減去green值得到差值t,然 后,用色彩值red、blue分別減去差值t,得到新的色彩值red、blue ;如果不是,則對該像素 點不做處理; 針對黃色抑制,判斷每個像素點中的blue值是否為該像素點的red、 green、 blue 中的最小值,如果是,用其余兩個色彩值red、green中較小的值減去blue值得到差值t,然 后,用色彩值red、 green分別減去差值t,得到新的色彩值red、 green ;如果不是,則對該像 素點不做處理。 進一步,如上所述的高效的圖像色彩抑制方法,其中,該方法從原始圖像中一次取 出8個像素點,將8個像素點的red、green、blue通道分別對應三個_ _mml28i變量pixel— red、 pixel_green、 pixel_blue ;根據(jù)上述三個變量pixel_red、 pixel_green、 pixel_blue 的內容,得到它們之間的最大值變量pixel—max和最小值變量pixeljiiin ;針對所要抑制的 彥頁色,將變量pixel_red或pixel_green或pixel_blue與最大值變量pixel—max或最小值 變量pixeljiiin進行相等比較操作,得到色彩抑制掩模變量mask,在該掩模變量mask中,符 合判斷條件的像素點對應的二進制值為l,否則為0,以此來確定需要進行色彩值修訂的符 合條件的像素點。 本發(fā)明的有益效果如下本發(fā)明通過在RGB空間對色彩的最大值和最小值進行運 算,將最大值顏色的色相向背離該顏色色相的方向運動,從而達到了抑制這種色相的目的。 這種方法不需要進行從RGB色彩空間到HSV/HSL色彩空間的轉換,就可以實現(xiàn)比較理想的 抑色效果,具有簡單易行,且容易優(yōu)化的特點,能夠明顯提高圖像色彩抑制的工作效率。
圖1為本發(fā)明實施例的具體流程圖。
具體實施例方式
下面結合附圖和具體實施例對本發(fā)明進行詳細的描述。 本發(fā)明所提出的這種色彩抑制方法直接工作在RGB空間,省去了色彩空間變換的 時間。該方法可以抑制六種顏色,分別是紅(red)、綠(green)、藍(blue)、青(cyan)、品紅 (magenta)禾口黃(yellow)。 本發(fā)明的抑色方法雖然是基于RGB空間的,但其原理卻要涉及到HSV空間。HSV空 間的含義以及RGB到HSV的轉換公式均為本領域的公知技術,可以參考相關文獻或網(wǎng)絡資 源(http:〃en. wikipedia. org/wiki/HSL_color_space)。從RGB至lj HSV的轉換公式可以看
4出,當某個顏色的一種色彩值(例如紅色red值)為red/green/blue三個值里面最大的時 候,這個顏色才位于以該色彩(例如紅色red)色相為中心張角為120度的扇形區(qū)域內,那 么將該色彩值(例如red值)改為其它兩個色彩(green與blue)之中最大的那個就相當 于將該顏色的色相向背離該色彩(例如紅色red)色相的方向運動(如果green大就向綠 色色相運動,否則向藍色色相運動),從而達到了抑制這種色相的目的。同理可以解釋其它 幾種色彩抑制的原理。 基于上述原理,本發(fā)明提出了針對六種顏色的抑色方法,該方法的核心算法描述 如下記三基色中紅色為r、綠色為g、藍色為b ; ①如果r為r/g/b中最大值,則r = max (g, b),實現(xiàn)紅色抑制 ②如果g為r/g/b中最大值,則g = ③如果b為r/g/b中最大值,則b = 如果r為r/g/b中最小值, 貝U令t = min (g, b) -r, g = g-1, b ⑤如果g為r/g/b中最小值, 貝U令t = min (r, b) -g, r = r-1, b 如果b為r/g/b中最小值, 貝U令b = min (r, g) -b, r = r-1, g
max(r,b),實現(xiàn)綠色抑制 max(r,g),實現(xiàn)藍色抑制
:b-t,實現(xiàn)青色抑制;
:b-t,實現(xiàn)品紅抑制;
:g-t,實現(xiàn)黃色抑制。
本發(fā)明具體實施方式
的流程如圖1所示,下面結合圖1和具體顏色詳細介紹本發(fā) 明的抑色方法。 首先,根據(jù)用戶對色彩抑制的選擇構造出六個掩模,maSk_red, mask—green, mask_ blue,mask_cyan,mask_magenta與mask_yellow。如果抑制某種顏色則對應的掩模為全1, 否則為全O。 比如用戶選擇抑制紅色而沒有選擇抑制黃色,則mask—red變量中二進制值為全 1,而mask—yellow則為全0。 然后,從原始圖像將8個像素點的數(shù)據(jù)讀入三個_ _mml28i變量中(SSE2每個寄 存器16字節(jié)長),分別對應這8個像素點的red、green、blue通道,將它們分別記為pixel_ red、pixel_green、pixel_blue。由于_ _mml28i變量是16字節(jié)長(實際上是SSE2指令集 所能處理的變量單位),所以一個_ _mml28i可以放8個2字節(jié)長的數(shù)據(jù),因此可以放入8 個點的數(shù)據(jù)進去。以pixel—red為例,放置方式可以表示為[r7 r6 r5 r4 r3 r2 rl r0], 并且可以對這8個2字節(jié)數(shù)據(jù)進行并行處理,后面所提到所有運算都是針對這種_ _mml28i 變量的并行運算(比如后面提到的min,max運算是指對著8個點對位進行min,max操作)。
根據(jù)pixel_red、pixel_green、pixel_blue三者的內容求出它們之間的最大值和 最小值,并分別放入變量pixel_min與pixel_max。 以紅色抑制為例,當像素的red為r/g/b三者最大時,根據(jù)pixel—red以及pixel_ max生成一個紅色抑制掩模存入到mask變量中。具體方式是用pixel_red與pixel_max進 行相等比較操作(SSE2有一條指令可以對兩個變量按每兩個字節(jié)為單位進行比較,比較相 同的兩字節(jié)處置為全1,否則全0),比較的結果即為掩模。比如pixel—red為[1,2,3,4,5, 6, 7, 8],而pixel—max為[100, 100, 100, 4, 20, 30, 7, 15],那么相等比較操作的結果是
。
5
用pixel_red減 去max(pixel_green, pixel_blue), 把pixel_red減 去 max(pixel_green, pixel_blue)的這個結果存入一個臨時變量tmp中去,然后把tmp與 mask—red進行與操作的結果存入tmp,接著再把tmp與前面提到的紅色抑制掩模(就是用 piXel_red以及pixel—max進行相等比較操作生成的掩模)進行與操作并存入tmp。最后 用piXel_red減去tmp的值存入pixel—red作為新的red值,紅色抑制完成。綠色抑制或 藍色抑制可用同樣的方法再依次處理。
舉例來說假設 mask—red為
pixel—red為[100 10 20 30 40 50 60 70]
pixel_green為[10 20 30 40 50 60 70 80]
pixel—blue為[50 45 50 45 50 45 50 45] 則可計算出pixel_max為[100 50 50 45 50 60 70 80],紅色抑制掩模mask為 [Oxff 0 0 0 0 0 0 O]。 tmp初始為[50 -35 -30 -15 -10 -10 -10 -IO],進行與操作后 變?yōu)閇50 0 0 0 0 0 0 O],用pixel—red減去tmp得到[50 10 20 3040 50 60 70]。
以處理青色抑制為例,當像素的red為r/g/b三者最小時,根據(jù)pixel—red以 及pixeljnin生成一個青色抑制掩模存入到mask變量中去,具體方式是用piXel_red與 pixeljnin進行相等比較操作,比較的結果即為掩模。然后把min(pixel—green, pixel_ blue)減去pixel_read的這個結果存入一個臨時變量tmp中去,接著把tmp與mask_cyan 進行與操作的結果存入tmp,再接著把tmp與mask進行與操作并存入tmp。最后用pixel_ green減去tmp的值存入pixel_green作為新的green值,用pixel_blue減去tmp的值存 入pixel—blue作為新的blue值,青色抑制完成。品紅抑制或黃色抑制可以用同樣的方法 再依次處理。
舉例來說假設 mask—cyan為[Oxff Oxff Oxff Oxff Oxff Oxff Oxff Oxff]
pixeljed為[10 20 30 40 50 60 70 80]
pixel_green為[100 10 20 30 40 50 60 70]
pixel_blue為[50 45 50 45 50 45 50 45] 則可計算出pixeljnin為[10 10 20 30 40 45 50 45]。青色抑制掩模mask為 [Oxff 0 0 0 0 0 0 O]。 tmp初始為[40 -10 -10 -10 -10 -15 -20 -25],進行與操作后 變?yōu)閇40 0 0 0 0 0 0 O],進行減tmp的操作后,pixel—green變?yōu)閇60 10 20 30 40 50 60 70]而pixel_blue變?yōu)閇10 45 50 45 50 45 50 45]。 最后,將pixel_red, pixel_green與pixel_blue交錯之后,得到每個像素點的
red/green/blue三個值,寫入到目標圖像中,然后處理后面8個像素點。 本發(fā)明工作在x86/x86-64架構下面,在具體實現(xiàn)這個方法的時候,可以采用
intel的SIMD增強指令集SSE2提高算法速度。由于SSE2可以進行整數(shù)或者浮點的矢量計
算,所以同時可以計算多個像素的鍵值;另外,由于SSE2指令本身就具備計算最大/最小值
的能力,就使得在計算鍵值的時候沒有任何條件分支語句,從而也提高了處理速度。 根據(jù)試驗結果,在一臺主頻為2. 5GHz的處理器上,對一幅1024x768大小的圖像
(BGRA空間)進行色彩抑制只需要2. 3ms。如果再充分利用多核/超線程技術的話(將計算平均分配到每個核上面或者硬件線程上), 一個四核的CPU處理上述圖像估計只需要1ms 左右??梢?,本發(fā)明能夠明顯提高圖像色彩抑制的工作效率。 本發(fā)明所述的方法并不限于具體實施方式
中所述的實施例,本領域技術人員根據(jù) 本發(fā)明的技術方案得出其他的實施方式,同樣屬于本發(fā)明的技術創(chuàng)新范圍。
權利要求
一種高效的圖像色彩抑制方法,其特征在于該方法在RGB空間中對原始圖像進行操作,包括對紅、綠、藍、青、品紅和黃六種顏色進行抑制,針對所需抑制的顏色,判斷每個像素點中對應的色彩通道的基色值是否為該像素點的red、green、blue中的最大值或最小值,然后,根據(jù)判斷的結果,對符合條件的像素點進行色彩值的修訂,得到目標圖像像素點的色彩值。
2. 如權利要求l所述的高效的圖像色彩抑制方法,其特征在于針對紅色抑制,判斷每 個像素點中的red值是否為該像素點的red、green、 blue中的最大值,如果是,將該像素點 的red值修改為其余兩個色彩值green、blue中較大的值;如果不是,則對該像素點不做處理。
3. 如權利要求l所述的高效的圖像色彩抑制方法,其特征在于針對綠色抑制,判斷每 個像素點中的green值是否為該像素點的red、 green、 blue中的最大值,如果是,將該像素 點的green值修改為其余兩個色彩值red、blue中較大的值;如果不是,則對該像素點不做 處理。
4. 如權利要求1所述的高效的圖像色彩抑制方法,其特征在于針對藍色抑制,判斷每 個像素點中的blue值是否為該像素點的red、green、blue中的最大值,如果是,將該像素點 的blue值修改為其余兩個色彩值red、 green中較大的值;如果不是,則對該像素點不做處理。
5. 如權利要求1所述的高效的圖像色彩抑制方法,其特征在于針對青色抑制,判斷每 個像素點中的red值是否為該像素點的red、 green、blue中的最小值,如果是,用其余兩個 色彩值green、blue中較小的值減去red值得到差值t,然后,用色彩值green、blue分別減 去差值t,得到新的色彩值green、blue ;如果不是,則對該像素點不做處理。
6. 如權利要求1所述的高效的圖像色彩抑制方法,其特征在于針對品紅抑制,判斷每 個像素點中的green值是否為該像素點的red、 green、 blue中的最小值,如果是,用其余兩 個色彩值red、blue中較小的值減去green值得到差值t,然后,用色彩值red、blue分別減 去差值t,得到新的色彩值red、 blue ;如果不是,則對該像素點不做處理。
7. 如權利要求1所述的高效的圖像色彩抑制方法,其特征在于針對黃色抑制,判斷每 個像素點中的blue值是否為該像素點的red、green、blue中的最小值,如果是,用其余兩個 色彩值red、 green中較小的值減去blue值得到差值t,然后,用色彩值red、 green分別減 去差值t,得到新的色彩值red、 green ;如果不是,則對該像素點不做處理。
8. 如權利要求1所述的高效的圖像色彩抑制方法,其特征在于該方法從原始圖像中 一次取出8個像素點,將8個像素點的red、 green、 blue通道分別對應三個—mml28i變 量pixel_red、 pixel_green、 pixel_blue ;根據(jù)上述三個變量pixel_red、 pixel_green、 pixelj3lue的內容,得到它們之間的最大值變量pixeljnax和最小值變量pixeljiiin ;針對 所要抑制的顏色,將變量pixel_red或pixel_green或pixel_blue與最大值變量pixel_ max或最小值變量pixel_min進行相等比較操作,得到色彩抑制掩模變量mask,在該掩模變 量mask中,符合判斷條件的像素點對應的二進制值為l,否則為0,以此來確定需要進行色 彩值修訂的符合條件的像素點。
全文摘要
本發(fā)明屬于視頻及圖像處理技術,具體涉及一種高效的圖像色彩抑制方法。該方法通過在RGB空間對色彩的最大值和最小值進行運算,將最大值顏色的色相向背離該顏色色相的方向運動,從而達到了抑制這種色相的目的。這種方法不需要進行從RGB色彩空間到HSV/HSL色彩空間的轉換,就可以實現(xiàn)比較理想的抑色效果,具有簡單易行,且容易優(yōu)化的特點,能夠明顯提高圖像色彩抑制的工作效率。
文檔編號H04N1/62GK101764910SQ200810238990
公開日2010年6月30日 申請日期2008年12月8日 優(yōu)先權日2008年12月8日
發(fā)明者劉鐵華, 孫季川, 見良, 鄭鵬程 申請人:新奧特(北京)視頻技術有限公司