2011-09-18 88 views
2

我需要處理第一個「原始」圖像以獲得類似於第二個「增強」的圖像。我應用了一些naif計算,並且新圖像具有更多對比度和更強烈的顏色,但在較高顏色區域會出現顏色洞。我對圖像處理一無所知,如果你能向我建議我可以應用哪些概念和/或算法來獲得沒有這個問題的結果,那將是非常棒的。如何增強圖像的顏色和對比度

Original

Enhanced

回答

3

將圖像轉換到HSB (Hue, Saturation, Brightness)色彩空間。

將飽和度乘以一定的量。如果您的平臺需要它,請使用截止值。

實施例中的Mathematica:

satMult = 4; (*saturation multiplier *) 
imgHSB = ColorConvert[Import["http://i.imgur.com/8XkxR.jpg"], "HSB"]; 
cs  = ColorSeparate[imgHSB];     (* separate in H, S and B*) 
newSat = Image[ImageData[cs[[2]]] * satMult]; (* cs[[2]] is the saturation*) 
ColorCombine[{cs[[1]], newSat, cs[[3]]}, "HSB"]] (* rebuild the image *) 

enter image description here

甲表增加飽和度值:

enter image description here

1

您在處理過的圖像中看到的 「洞」 是較暗的原始圖片的區域,使用變暗算法達到負值。我懷疑這些超出範圍的值然後作爲正數寫入到新圖像中,所以它們會以亮度比例的較高部分結束。例如,假設一個像素值爲10,並且您將減去所有像素中的12,以使它們變暗一點。這個像素會下溢並變成-2。當你把它寫回文件時,-2會被十六進制表示爲0xfe,如果你把它作爲一個無符號數,這就是254。

您應該使用一種算法將像素值保持在有效範圍內,或者至少應該將這些值「夾」到有效範圍內。定義爲一個C宏一個典型的鉗位功能是:

#define clamp(p) (p < 0 ? 0 : (p > 255 ? 255 : p)) 

如果加上上面的宏到您的處理功能,它會採取「洞」的照顧,而是你現在必須在那些地方暗色調。

如果您已準備好更高級一點的東西,here on Wikipedia它們具有GIMP使用的亮度和對比度公式。如果你選擇了合適的係數,這些將會對你的圖像做很好的工作。

+0

感謝,正是that's發生what's。我要去看看那個維基百科網站。 – Daniel

0

This wikipedia這篇文章在解釋用於對比度增強的直方圖均衡方面做得很好。

代碼灰度圖像:

unsigned char* EnhanceContrast(unsigned char* data, int width, int height) 
{ 
    int* cdf = (int*) calloc(256, sizeof(int)); 
    for(int y = 0; y < height; y++) { 
     for(int x = 0; x < width; x++) { 
      int val = data[width*y + x]; 
      cdf[val]++; 
     } 
    } 

    int cdf_min = cdf[0]; 
    for(int i = 1; i < 256; i++) { 
     cdf[i] += cdf[i-1]; 
     if(cdf[i] < cdf_min) { 
      cdf_min = cdf[i]; 
     } 
    } 

    unsigned char* enhanced_data = (unsigned char*) malloc(width*height); 
    for(int y = 0; y < height; y++) { 
     for(int x = 0; x < width; x++) { 
      enhanced_data[width*y + x] = (int) round(cdf[data[width*y + x]] - cdf_min)*255.0/(width*height-cdf_min); 
     } 
    } 

    free(cdf); 
    return enhanced_data; 
}