원형 검사법

원형 대상 검사

다음과 같은 제품의 검사를 진행 할 경우 영상처리에서 어떻게 처리 할 것인지에 대한 방법을 고민한다.

Circle Image

원형 제품의 검사방법은 영역 정보가 필요하므로 원형 검출을 해야한다. 이후, 무시할 영역과 검사가 필요한 영역을 구분해 내야하기 때문이다.

원형을 평면으로

원의 넓이를 구할때 원을 수없이 Slice하는 것을 교육과정에서 경험하였다. 그 방법을 이용하여 원을 평면으로 변형 시킨다.

  • 우선 원을 검출 한다.(Hough Circle)
  • 검출한 원의 중심으로부터 원주를 계산한다.
  • 2PI/원주 로 최소 iterator 간격을 결정한다. (1 px씩 iterator)
  • iterator씩 데이터를 복사한다.

Pesudo Code

    
    cv::Mat GetDistortion(const cv::Mat& matSrc, const cv::Point pntCenter, const double radius)
    {
      원주 구하기 (2 * pi * r)
      새로 만들 이미지 생성 (원주, 반지름름)
      각도를 원주로 나누어 점집합 간격 구하기 (2 * pi / 원주)
      
      for i = 0; i < radius; i++
      {
        for j = 0; j < 원주; j++
        {
          // 회전 변환.
          srcx = 중심x + i * cos (j * 점집합간격)
          srcy = 중심y + i * sin (j * 점집합간격)
          
          dstx = j;
          dsty = i;

          새로만들 이미지에 원본 이미지지 복사 (src -> dst)
        }
      }
    }
    
   

Result

Circle Image Result

마무리

원형 이미지를 평면으로 변환하므로써 얻는 장점

  • 이미지를 평면으로 변환하므로 일반 영상처리 알고리즘을 적용할 수 있다. (Filter 계열)
  • 보간 알고리즘이 불필요(원의 중심으로 갈 수록 자동 보간.)

원형 이미지를 평면으로 변환하므로써 고려할 점

  • 이미지에서 Defect이 발생 할때, Defect의 위치를 원본으로 변환하는 과정이 필요.
  • 원 검출이 에러가 발생할 경우.