분류 전체보기
-
GrabCut 함수컴공지식/컴퓨터비전 2024. 10. 2. 23:00
void grabCut(cv::InputArray img, cv::InputOutputArray mask, cv::Rect rect, cv::InputOutputArray bdgModel, cv::InputOutputArray fgdModel, int iterCount, int mode) 이렇게 생겼다. mask는 객체와 배경을 구분하는 마스크 이미지다. 여기서는 객체인지, 배경인지, 혹은 잘 모르는 부분인지 표시할 수 있다. GC_BGD (0): 확실한 배경GC_FGD (1): 확실한 객체GC_PR_BGD (2): 아마도 배경GC_PR_FGD (3): 아마도 객체rect는 객체 이 포함된 사각형 영역의 좌표를 지정한다. bdgModel랑 fgdModel는 비워두면 알고리즘이 알아서 사용한다.iterCo..
-
Local (Adaptive) Thresholding 코드 구현컴공지식/컴퓨터비전 2024. 10. 2. 22:56
이건 이미지의 각 부분마다 주변 픽셀들의 밝기를 기준으로 다른 임계값을 적용하는 방법이다.이미지가 조명에 따라 밝기가 달라질 때, 전역 임계값(global thresholding)보다 훨씬 좋은 결과를 줄 수 있다. int main() { Mat image, binary, adaptive_binary; // 입력 이미지와 결과 이미지를 위한 변수들 image = imread("opencv.jpg", 0); // 이미지를 그레이스케일로 불러옴 threshold(image, binary, 150, 255, THRESH_BINARY); // 전역 임계값으로 이진화 adaptiveThreshold(image, adaptive_binary, 255, ADAPTIVE_THRESH_MEA..
-
Global Thresholding 구현 코드컴공지식/컴퓨터비전 2024. 10. 2. 22:55
전역 임계값은 이미지 전체에서 하나의 임계값(Threshold)을 설정해서, 그 임계값을 기준으로 픽셀 값을 이진화하는 기법이다.이 코드는 반복적으로 임계값을 조정하면서 새로운 임계값을 계산하는 방법을 보여준다.int main() { Mat image, thresh; // 이미지와 이진화된 결과 이미지를 위한 Mat 객체 int thresh_T, low_cnt, high_cnt, low_sum, high_sum, i, j, th; // 변수들 선언 thresh_T = 200; // 초기 임계값 설정 th = 10; // 오차 허용 범위 (반복을 종료하기 위한 조건) low_cnt = high_cnt = low_sum = high_sum = 0; // 카운트 및 합 초기..
-
inRange 함수컴공지식/컴퓨터비전 2024. 10. 2. 22:50
이 함수는 이미지나 배열에서 특정 범위에 속하는 값들을 찾아내서 이진 이미지(흑백)로 변환하는 데 사용한다.예를 들어, 어떤 이미지에서 빨간색만 골라내고 싶을 때 이 함수를 쓸 수 있다.void inRange(cv::InputArray src, cv::InputArray lowerb, cv::InputArray upperb, cv::OutputArray dst) 이런 모양이다. lowerb는 하한선, 배열이나 스칼라 값으로 주어질 수 있다. 이 값보다 크거나 같은 픽셀만 선택된다.upperb는 상한선, 마찬가지로 배열이나 스칼라 값으로 주어지며, 이 값보다 작거나 같은 픽셀만 선택된다.dst는 결과가 저장될 출력 배열이다. 이 배열은 src와 같은 크기로 만들어지고, 결과로 나오는 이미지는 CV_8U(8..
-
adaptiveThreshold 함수 코드컴공지식/컴퓨터비전 2024. 10. 2. 22:46
void adaptiveThreshold(Mat src, Mat dst, double maxval, int adaptiveMethod, int thresholdType, int blockSize, double C) 이렇게 생겼다.double maxval은 임계값을 넘었을 때 적용할 최대 값이고 보통 255로 둔다.int adaptiveMethod은 임계값을 계산하는 방식인데 두 가지가 있다. ADAPTIVE_THRESH_MEAN_C: 주변 영역의 평균을 사용해 임계값을 계산ADAPTIVE_THRESH_GAUSSIAN_C: 가우시안 가중 평균을 사용해 임계값을 계산int thresholdType은 이진화 방법이다. 주로 THRESH_BINARY(임계값을 넘으면 흰색, 아니면 검정)나 THRESH_BINAR..
-
threshold 처리 코드컴공지식/컴퓨터비전 2024. 10. 2. 22:42
이렇게 생겼다double threshold(Mat src, Mat dst, double thresh, double maxval, int type); double thresh가 픽셀 값과 비교할 임계값이고double maxval은 임계값을 넘는 픽셀에 할당될 값이다. 예를 들어 255 같은 값을 주면 흰색으로 변한다.int type은 임계값 처리 방식이다. 아래와 같이 쓸 수 있다. THRESH_BINARY: 임계값보다 크면 maxval, 작으면 0.THRESH_BINARY_INV: 위와 반대로 임계값보다 작으면 maxval, 크면 0.THRESH_TRUNC: 임계값보다 크면 그 픽셀 값을 임계값으로, 작으면 그대로 유지.THRESH_TOZERO: 임계값보다 크면 그대로 두고, 작으면 0.THRESH_TO..
-
GrabCut이란?컴공지식/컴퓨터비전 2024. 10. 2. 22:16
GrabCut은 이미지에서 배경과 객체를 분리하는 방법 중 하나다.이 방법은 반자동 방식으로, 사용자가 먼저 대충 영역을 지정해주고, 컴퓨터가 나머지를 알아서 처리해주는 거다. 작동 방식으로는사용자가 관심 있는 부분에 사각형을 입력한다. 사각형 바깥은 확실한 배경으로 처리되고, 사각형 안쪽은 미지의 영역으로 취급된다. "여기는 뭐지?" 하고 생각하는 거다.컴퓨터가 초기 레이블링을 한다. 사용자가 지정한 데이터를 바탕으로, 컴퓨터는 자동으로 배경과 객체를 나누려고 시도한다. 이 과정에서 픽셀을 배경이나 객체로 라벨링하거나, 그게 애매하면 임시로 할당해둔다.가우시안 혼합 모델(GMM) 을 사용해 객체와 배경을 모델링한다. GMM은 픽셀의 밝기 값과 색상 같은 특징들을 사용해 객체와 배경을 더 정밀하게 구분해..
-
적응형 임계값(Adaptive Thresholding)이란컴공지식/컴퓨터비전 2024. 10. 2. 21:47
Local(Adaptive) Thresholding은 이미지의 각 부분에 따라 다른 임계값을 적용하는 방법이다.글로벌 임계값은 이미지 전체에 하나의 임계값을 적용하는데, 이 방법은 각 작은 영역에 맞는 임계값을 따로 정하는 거다.왜냐면 이미지마다 밝기나 명암 차이가 다르니까, 그에 맞춰서 나눠야 제대로 분할할 수 있기 때문이다. 이건 두가지 방법이 있다. ADAPTIVE_THRESH_MEAN_C : 각 픽셀의 주변 영역(blocksize)의 평균을 계산한 다음, 그 값에서 C를 뺀 값이 임계값이 된다.(C는 적응형 임계값을 계산할 때 보정 값 또는 상수를 의미한다. 상황에 따라 다르게 설정될 수 있는데, 이를 통해 결과값을 더 세밀하게 조정할 수 있다.) ADAPTIVE_THRESH_GAUSSIAN_C ..