OpenCV

OpenCV+Unity Gaussian, Median Blur와 Canny 내용 재정리

Dean83 2022. 4. 14. 17:16

보통 잡음제거를 위해 Gaussian Blur와 Median Blur를 많이 사용한다. 

 

그리고, 이미지에서 edge를 검출하기 위해 Canny 알고리즘을 사용하여 검출한다. 

 

이에대한 인자값 설명등을 위해 따로 내용정리를 한다. 

 

0. 필터, 컨블루전에 대한 간략 설명

    - 필터, Kernel, Window, Mask 가 동음이의어 이다.
    - 행렬로 이루어져 있으며, (예 : 5 x 5 행렬) 각 픽셀을 이 행렬을 통과시켜 값을 변경하는 계산식을 컨블루전

       이라고 한다. 이런 행위 자체를 필터링이라 한다. 


* 각 알고리즘의 kernel크기는 홀수이어야 한다

1. Gaussian Blur
    - 대상이 되는 마스크가, 가운데 픽셀값이 가장 높고 주변부로 갈수록 낮다. 

    - 이 특성이 있기에, 픽셀 계산을 진행하면, 대상이 되는 픽셀 주변부가 가장 영향을 많이받고, 

       멀어질수록 영향을 덜 받는다. 따라서 본모습의 형태는 유지하면서 Blur 효과를 낸다. 


    - 호출방법과 인자값 설명
       - 호출 : Cv2.GaussianBlur(source, dst, new Size(25, 25), 0);
       - 인자값 : 
          - 1번 : 소스 Mat
          - 2번 : 결과 출력 Mat
          - 3번 : Gaussian Kernel의 크기이다. 이 크기가 클수록 Blur 효과가 커진다
          - 4번 : 표준편차값으로, 0이 Auto이다. 

    - 원본과 Gaussian Blur 적용 이미지
       - 전반적으로 흐릿한걸 볼 수 있다.

2. Median Blur
    - Kernel의 픽셀값중 중앙값 (가운데값)을 선택한다. 

       * 중앙값이란 값 자체가 중앙에 있는 값을 말한다. 예를들어 10, 30, 90, 150, 200 이라 한다면 90이 중앙값이 된다. 
    - 작은 검은색 혹은 흰색점 (마치 지지직 거리는 노이즈가 껴 있는 이미지) 제거에 좋다. 
       - 그 이유는, 중앙값을 선택하기에, 검은색, 흰색값은 대체로 중앙값이 될 수 없으므로 제거가 된다.

 - 호출방법과 인자값 설명
       - 호출 : Cv2.MedianBlur(source, dst, ksize);
       - 인자값 : 

          - 1번 : 소스 Mat
          - 2번 : 결과 출력 Mat
          - 3번 : Kernel의 크기이다. 값이 클수록 blur 효과가 크다.
 - 원본과 MedianBlur 적용 이미지

 * Gaussian Blur 와 MedianBlur의 큰 차이점은, MedianBlur는 Edge가 대체적으로 선명하다.

 

3. Canny 알고리즘
    - 이미지에서 Edge만 검출하여 돌려주고, 나머지는 흑백처리 한다.  테두리 검출에 쓰인다. 

    - 호출방법과 인자값 설명
       - 호출 : Cv2.Canny(source, dst, threshold1, threshold2);
       - 인자값 :

          - 1번 : 소스 Mat
          - 2번 : 결과 출력 Mat
          - 3번 : 임계값이다. 이 값이 작을 수록 Edge로 판단될 가능성이 커진다. 즉 Edge가 아니더라도 Edge로 인식될
                    확률이 올라간다. 
                    사각형에서 일부 선이 끊겼을 경우를 가정하면, 이 값이 작을수록 Edge로 사각형 테두리 선이 검출되고
                    값이 클수록 Edge로 검출되지 않을 가능성이 커진다. 이는 4번째 인자값의 결과에 따라 결정된다.

          - 4번 : Edge인지 아닌지를 판단하는 임계값이다. 3번보다 4번 임계값의 변화가 결과물에 큰 영향을 미친다. 

                    값이 작을수록 작은 부분도 Edge로 판단하고, 값이 클수록 단순화 하여 Edge를 검출한다. 

 

 - Canny 알고리즘 적용. 따로 명시가 없는경우 값은 100을 주었다.