-
Sobel 엣지 검출기(Sobel Edge Detector) 구현컴공지식/컴퓨터비전 2024. 9. 25. 23:28
int main() {
Mat image, blur, grad_x, grad_y, abs_grad_x, abs_grad_y, result;
image = imread("lena.png", 0); // 이미지를 흑백으로 불러옴
GaussianBlur(image, blur, Size(5, 5), 5, 5, BORDER_DEFAULT); // 가우시안 블러로 노이즈 제거
// Sobel 연산 수행 (x 방향 미분)
// blur: 입력 이미지, grad_x: x 방향 결과 저장
// 1: x 방향으로 1차 미분, 0: y 방향으로는 미분하지 않음, 3: 커널 크기
Sobel(blur, grad_x, CV_16S, 1, 0, 3);
convertScaleAbs(grad_x, abs_grad_x); // 절대값을 구해서 8비트 이미지로 변환
// Sobel 연산 수행 (y 방향 미분)
// 0: x 방향 미분 안함, 1: y 방향으로 1차 미분
Sobel(blur, grad_y, CV_16S, 0, 1, 3);
convertScaleAbs(grad_y, abs_grad_y); // 절대값을 구해서 8비트 이미지로 변환
// x, y 방향 결과를 합쳐서 최종 엣지 검출 결과를 생성
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, result);
// 결과 출력
imshow("X", abs_grad_x);
imshow("Y", abs_grad_y);
imshow("Input image", image);
imshow("Sobel Edge Detector", result);
waitKey(0); // 키 입력 대기
}코드를 보면 Sobel 함수로 x, y 방향의 그래디언트를 계산하는 부분이 보이고
addWeighted 함수로 x 방향과 y 방향의 결과를 합쳐서 최종 엣지 이미지를 만드는 것도 볼 수 있다.
'컴공지식 > 컴퓨터비전' 카테고리의 다른 글
HoughLines를 이용한 직선 감지 코드 (0) 2024.09.25 Canny 엣지 검출기 구현 (0) 2024.09.25 엣지 픽셀(Edge pixels)과 엣지(Edges) (1) 2024.09.25 White Balancing 예제 (0) 2024.09.20 Pseudo Coloring 예제 (0) 2024.09.20