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