그림 판단.-비트 맵 이 흑백 인지 아 닌 지 판단 하 는 방법.

이미지 쌍:이 치 를 거 친 jpg 형식의 비트 맵(프로필 사진)
    알고리즘 이치:
    픽 셀 마다 RGB 값 을 통 해 진행 판단 합 니 다.비트 맵 은 픽 셀 점 으로 이 루어 져 있 고 픽 셀 점 마다 RBG 값 이 있 기 때문에 RGB 값 을 통 해 그림 이 컬러 인지 아 닌 지 를 판단 할 수 있다 는 것 을 잘 알 고 있 습 니 다.
    【RGB]:R 은 빨간색 을 대표 하고 G 는 녹색 을 대표 하 며 B 는 파란색 을 대표 하 며 삼원 색 의 이 치 를 통 해 풍부 하고 다채로운 색 의 얼굴 을 형성한다.
     시작 생각:
    1.순수한 컬러 사진 은 픽 셀 점 의 색상 이 검은색 인지 흰색 인지 판단 만 하면 되 고 비 컬러 색상 에 닿 으 면 장단 컬러 사진 이 라 고 생각 할 수 있 습 니 다.
    2.회색 계 컬러 그림 은 회색 계 가 있 기 때문에 화소 점 이 컬러 인지 아 닌 지 를 통 해 판단 할 수 있 지만 회색 계 화소 점 의 RGB 는 특색 이 있 습 니 다.【R=G=B】
     알고리즘 최적화:
    1.순수한 컬러,흰색 과 검은색 두 가지 색 만 있 고 흰색 RGB[R=G=B=255],색 이 검은색[R=G=B=0];
    2.회색 계단,RGB【R=G=B】;
    색 이 든 회색 이 든 모두 RGB 중[R=G=B]임 을 알 수 있 습 니 다.
    문제 가 발생 했 습 니 다:
    어떤 것 은 컬러 사진 이 라 고 생각 할 수 있 고 녹색 이나 빨간색 이 있 는 상황 이 존재 하 므 로[R=G=B]법 으로 판단 할 수 없다.
    생각
    이 사진 들[R<>B<>G]은 대체적으로 회색 얼굴 에 가 깝 기 때문에 R,G,B 의 차이 가 크 지 않 을 것 입 니 다.제 테스트 를 통 해 이[편 색 된 컬러 사진]사진 에 화소 점 이 있 는 R,G,B 의 차 이 는 절대 최대 50(R-G,R-B,G-B)을 초과 하지 않 고 컬러 사진 에 있 는 R,B 를 발 명 했 습 니 다.G 차 이 는 절대 치,최대 치 는 50 을 넘 는 픽 셀 이 존재 합 니 다.
    간단히 말하자면:
    1.[사용자 정의]색 편향 값 Diff=Max(|R-G|,|R-B|,|G-B|);
    2.컬러 이미지 중 가장 큰 Diff<50;
 【P.S:이 알고리즘 은 오차 가 있 을 수 있 습 니 다.엄격 한 의미 에서 R=G=B,Diff=0 이 어야 합 니 다.]
     상세 한 현실:

/// <summary>
///
/// </summary>
/// <param name="filename"> </param>
/// <returns></returns>
public bool isBlackWhite(string filename)
{
   Color c = new Color();

   using (Bitmap bmp = new Bitmap(filename))
   {
      //
      for (int y = 0; y < bmp.Height; y++)
      {
         for (int x = 0; x < bmp.Width; x++)
         {
            c = bmp.GetPixel(x, y);

     // Diff
            if (GetRGBDiff(c.R, c.G, c.B) > 50)
            {
               return false;
             }
          }
       }

       return true;
    }
}


public int GetRGBDiff(int r,int g,int b)
{
   // , , r-g,r-b,g-b 。
}

좋은 웹페이지 즐겨찾기