[C++/MFC] 엣지검출 - 소벨 검출

Lachi_·2023년 12월 22일
0

mfc

목록 보기
14/16

소벨 검출은 3x3 크기의 행렬을 사용해 연산을 했을 때, 중심을 기준으로 각 벡터의 앞뒤 값을 비교해 변화량을 검출하는 알고리즘이다.

필터는 다음과 같다.

축별로 연산을 한 뒤에 X, Y축의 절대값의 합을 구함으로써 가장자리를 찾아낼 수 있다.

// 소벨 필터를 적용해서 엣지 검출
	for (int y = 1; y < IMAGE_HEIGHT - 1; y++) {
		for (int x = 1; x < IMAGE_WIDTH - 1; x++) {
			int gx = -m_original[(y - 1) * IMAGE_WIDTH + (x - 1)] + m_original[(y - 1) * IMAGE_WIDTH + (x + 1)]
				- 2 * m_original[y * IMAGE_WIDTH + (x - 1)] + 2 * m_original[y * IMAGE_WIDTH + (x + 1)]
				- m_original[(y + 1) * IMAGE_WIDTH + (x - 1)] + m_original[(y + 1) * IMAGE_WIDTH + (x + 1)];
			int gy = m_original[(y - 1) * IMAGE_WIDTH + (x - 1)] + 2 * m_original[(y - 1) * IMAGE_WIDTH + x] + m_original[(y - 1) * IMAGE_WIDTH + (x + 1)]
				- m_original[(y + 1) * IMAGE_WIDTH + (x - 1)] - 2 * m_original[(y + 1) * IMAGE_WIDTH + x] - m_original[(y + 1) * IMAGE_WIDTH + (x + 1)];

			// 엣지 강도 계산
			m_result[y * IMAGE_WIDTH + x] = (BYTE)sqrt(gx * gx + gy * gy);
		}
	}

profile
개인 저장용. 오류 매우 많음.

0개의 댓글