conda에서 지우고 다시 깔고 opencv-contrib-python 깔고 다해봤는데 다 다다다다다안됐다.
cv2.error: OpenCV(4.5.5) /io/opencv/modules/highgui/src/window.cpp:1268: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
히스토그램 평활화나 스트레칭은 주로 어두운 영상이나 밝은 영상에서 명암 대비를 높여주기위해 사용한다.
히스토그램을 가지고 평활화를 하거나 스트레칭을 하는 기법은 주로 그레이스케일 차원에서 이루어진다. 즉, rgb 데이터인 경우 명암을 관장하는 채널을 추출하기 위해 Yuv나 Lab 컬러모델로 변환 후 Y 값이나 L 값을 이용하여 평활화, 스트레칭 적용 후 다시 머징하는 것이 기본 과정이다.
히스토그램 평활화에 여러 기법들이 있는데 크게 두가지로 나눌 수 있다.
Global: 영상 전체를 입력하여같은 모든 픽셀에 파라미터를 적용하는 것
Adaptive: 윈도우 사이즈를 정하여 부분 별로 파라미터를 적용하는 것
Global의 단점을 개선하기 위해 Adaptive 기법이 제안되었는데 Global의 단점은 특정 부분의 명도대비가 적고 특정부분이 높을 경우 모두 원만하게 처리가 불가능하다는 점이다. 즉, 같은 파라미터로 적용하니 제대로된 값을 얻기 어렵다는 뜻이다.
히스토그램 평활화를 python으로 적용하려면 간단하게 아래와 같은 코드를 사용하면 된다.
Adaptive 기법의 대표주자는 Contrast Limited Adaptive Histogram Equalization (CLAHE) 기법이 있다. 마찬가지로 Python으로 적용해 보려면 다음과 같다. CLAHE는 말 그대로 명도대비를 제한하며 적응적으로 히스토그램을 평활화하는 것으로 파라미터가 윈도우 사이즈, 클립 리미트가 들어간다. 클립 리미트가 명도 제한 값이고 tilieGridSize가 윈도우 사이즈이다.