2014-01-08 55 views
0

我面臨檢測picureBox1中加載的圖像中的皮膚顏色的問題,我實現了下面的文章中的公式。ArgumentException在C#代碼中的錯誤

我需要你的建議,使我的代碼工作。

感謝

代碼:

 Bitmap bm = (Bitmap)pictureBox1.Image; 
     Bitmap bmp = new Bitmap(pictureBox1.Image.Width, pictureBox1.Image.Height); 
     Color color = new Color(); 
     double Cb,Cr,r,g,b,R,G,B; 
     double CbMean = 156.56; 
     double CrMean = 117.43; 
     double K1 = 160.13 ; 
     double K2 = 12.143; 
     double K3 = 12.143; 
     double K4 = 299.46; 
     for (int i = 0; i < pictureBox1.Width; i++) 
     { 
      for (int j = 0; j < pictureBox1.Height; j++) 
      { 
       color = bm.GetPixel(i, j); 
       R = Convert.ToDouble(color.R); 
       G = Convert.ToDouble(color.G); 
       B = Convert.ToDouble(color.B); 

       r = R/(R+G+B); 
       g = G/(R+G+B); 
       b = B/(R+G+B); 
       Cb = (-0.169 * r - 0.331 * g + 0.500 * b); 
       Cr = (0.500 * r - 0.418 * g - 0.082 * b); 
       Cb -= CbMean; 
       Cr -= CrMean; 
       double CbDist = (K1 * Cb) + (K3 * Cr); 
       double CrDist = (K2 * Cb) + (K4 * Cr); 
       double CbDist1 =(0.5 * Cb) + (0.5 * Cr); 
       double CrDist1 = (0.5 * Cb) + (0.5 * Cr); 
       double dist = CbDist + CrDist; 
       double dist1 = CbDist1 + CrDist1; 
       double gmm = Math.Exp(dist * dist1); 
       bmp.SetPixel(i, j, Color.FromArgb(255, (int)gmm, (int)gmm, (int)gmm)); 
      } 
     } 
+3

你能提供更多關於你所看到的錯誤的信息嗎? – bhamlin

+0

ArgumentException在代碼的最後一行(bmb.setpixel ...)中處理,但是,有時我只能看到黑色圖像。 –

+0

也許你的'gmm'值大於255? –

回答

1

看來你的GMM值大於255

documentation

ArgumentException的alpha,紅色,綠色或藍色小於0或大於 超過255

檢查GMM的價值,並確保它有一個有效值

+0

感謝您的回答,但我完全按照文章所述。而GMM值是上述論文的一個等式。我不知道是什麼導致了錯誤。 –

+0

@HannahSolomons ...除了這顯然是問題所在。只要輸出一些東西,如果'gmm'不在0到255之間,我幾乎可以保證它會發生。 – tnw

+0

在某些圖像中,輸出在pictureBox2中顯示爲BLACK圖像,有時會在GMM值中出現ArgumentException錯誤。我的方程是正確的。根據上面的文章,我需要知道我的錯誤在哪裏。我還需要在論文中畫出可能性圖像。 –