2015-07-31 4 views
0

Я хочу найти координаты точек черного цвета из цветного изображения. Если я поставил три точки на белом фоне, мой код обнаружит его и покажет координаты в текстовых окнах. Но мой код не работает для изображения, указанного в следующей ссылке. что мне делать??Получить координаты точки от цветного изображения

https://drive.google.com/file/d/0B6ynC-W5aF41cWxtU3BVN3g3U00/view?usp=sharing

Мой код:

for (int i = 0; i < PatientImage.Image.Height; i++) 
{ 
    for (int j = 0; j < PatientImage.Image.Width; j++) 
     { 
      //Get the color at each pixel 
      Color now_color = bmp.GetPixel(j, i); 

//Compare Pixel's Color ARGB property with the picked color's ARGB Property 
      if (now_color.ToArgb() == Color.Black.ToArgb()) 
      { 
       // MessageBox.Show("Color Found!"); 
       // MessageBox.Show("X = " + j + " , " + "Y =" + i); 
        bool flag = false; 

       if (String.IsNullOrEmpty(COPX.Text)) 
        { 
         COPX.Text = Convert.ToString(j); 
         COPY.Text = Convert.ToString(i); 
         flag = true; 
        } 

      } 
     } 
} 
+0

Вы должны разместить код для просмотра. Но сначала подумайте о том, чтобы отладить его, чтобы сузить его до * точной * проблемы; сравнение не работает, неправильный формат и т. д. – GEEF

+0

В этом изображении нет черного или белого – RadioSpace

ответ

0

Как уже упоминалось основная проблема заключается в том, что «черные точки» совсем не черный. В лучшем случае они темно-серые.

Реальное решение будет не сравнить цвет равенства, но яркость быть ниже некоторого порога:

float threshold = 0.15f; 
if (bmp.GetPixel(j, i).GetBrightness() < threshold).. 

Очевидно, вам придется играть со значением порога.

Он также может быть полезно применить некоторые gamma to the image, best by using a Color Matrix ..

Приглядевшись на примере изображения, я должен предположить, что некоторые другие части также довольно темно; чтобы исключить их, вам может потребоваться добавить проверку на насыщение, а также:

Color now_color = bmp.GetPixel(j, i); 
if (now_color.GetBrightness() < threshold1 && now_color.GetSaturation < threshold2)..