[C++/MFC] Sharpen Filter

Lachi_·2023년 11월 30일
0

mfc

목록 보기
8/16

Sharpness는 이미지의 세부 사항이 얼마나 잘 보이는지를 나타내는 지표로, Sharpen 필터는 이미지의 날카로움을 높여 세부 사항을 더 잘 볼 수 있게한다. Sharpen 필터를 수행하기 위해서는 이미지의 경계선을 감지할 필요가 있기 떄문에 [[Laplacian]] 필터를 우선 적용한 뒤에 진행한다.

라플라시안 필터를 적용한 뒤에는 각 픽셀에 대해 원본 이미지의 픽셀 값Laplacian 필터를 적용한 이미지의 픽셀 값을 더하여 원본 이미지에 에지를 강조한 결과를 더해준다. 이를통해 이미지의 세부 사항이 더 잘 보이게 된다.
다만 Kernel Size가 지나치게 커지면 이미지가 쨍해지는 느낌이 들고 되려 노이즈가 생길 수 있다.

void CImageDlg::SharpenFilter()
{
	// 이미지가 로드되지 않았으면 반환
	if (m_original == nullptr)
		return;

	// 결과를 저장할 임시 이미지 생성
	BYTE* temp = new BYTE[IMAGE_SIZE];
	memcpy(temp, m_original, IMAGE_SIZE);

	// 라플라시안 필터 적용
	LaplacianFilter();

	// 각 픽셀에 대해
	for (int y = 0; y < IMAGE_HEIGHT; y++) {
		for (int x = 0; x < IMAGE_WIDTH; x++) {

			int pixel = m_original[y * IMAGE_WIDTH + x] + m_filtered[y * IMAGE_WIDTH + x];
			// 필터 적용 결과가 0보다 작으면 0, 255보다 크면 255로 설정
			if (pixel < 0) pixel = 0;
			if (pixel > 255) pixel = 255;

			// 결과를 임시 이미지에 저장
			temp[y * IMAGE_WIDTH + x] = pixel;
		}
	}

	// 결과를 m_filtered에 복사
	memcpy(m_filtered, temp, IMAGE_SIZE);
	delete[] temp;  // 할당 해제
}

장단점

샤프닝 필터는 이미지의 세부 사항을 강조하는 데 사용되는 필터로, 이미지의 날카로움을 높여 세부 사항을 더 잘 볼 수 있게 한다. 장점으로는 세밀한 부분이나 경계선을 뚜렷하게 만들 수 있다는 점이 있다. 하지만 단점으로는 이미지 내의 노이즈도 함께 강조할 수 있다는 점이있다.

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

0개의 댓글