영상 날카롭게 만들기
2023. 6. 7. 09:42ㆍComputer/영상처리
언샤프 마스크 필터링 기법을 이용한 영상 날카롭게 만들기
영상을 날카롭게 만드는 것(샤프닝Sharpening 또는 크리스프닝Crispening) -> 영상 내의 엣지 부분을 강조하여 영상을 더욱 선명한 느낌으로 만들어주는 영상 처리 기법이다.
언샤프 마스크 필터링 기법
부드러워진 영상을 이용
g(x, y) = f (x, y) - s(x, y)
h(x, y) = f (x, y) + g(x, y)
라플라시안 필터
라플라시안을 이용한 언샤프 마스크 필터 - 이차 미분을 이용한 언샤프 마스크 필터
a - 입력 영상에서 엣지 부분의 그레이스케일 값의 변화를 1차원 함수 f(x)로 표현한 것
b - a를 x축에 대해 미분한 f´(x)
c - b를 한 번 더 미분한 이차 미분 함수 f´´(x)
d- f(x)에 이차 미분 함수 f´´(x)를 뺀 것, 여러 번의 연산을 수행하는 대신 하나의 마스크를 이용하는 형태로 엣지가 강조된 날카로운 영상을 만들 수 있다.
∇2 연산자가 이차 미분을 나타내는 연산자이며, 라플라시안(Laplacian) 또는 델 스퀘어del square라고 읽는다.
이 수식을 마스크 형태로 만든 것이 라플라시안 필터 마스크이다.
void IppFilterLaplacian(IppByteImage& imgSrc, IppByteImage& imgDst)
{
int w = imgSrc.GetWidth();
int h = imgSrc.GetHeight();
imgDst.CreateImage(w, h);
BYTE** pSrc = imgSrc.GetPixels2D();
BYTE** pDst = imgDst.GetPixels2D();
int i, j, sum;
for (j = 1; j < h - 1; j++)
for (i = 1; i < w - 1; i++)
{
sum = pSrc[j - 1][i] + pSrc[j][i - 1] + pSrc[j + 1][i] + pSrc[j][i + 1]
- 4 * pSrc[j][i];
pDst[j][i] = static_cast<BYTE>(limit(sum + 128)); //픽셀값에 128을 더해서 흰색부분이 회색으로 보인다.
}
}
라플라시안을 이용한 언샤프 마스크 필터
void IppFilterUnsharpMask(IppByteImage& imgSrc, IppByteImage& imgDst)
{
int w = imgSrc.GetWidth();
int h = imgSrc.GetHeight();
imgDst = imgSrc;
BYTE** pSrc = imgSrc.GetPixels2D();
BYTE** pDst = imgDst.GetPixels2D();
int i, j, sum;
for (j = 1; j < h - 1; j++)
for (i = 1; i < w - 1; i++)
{
sum = 5 * pSrc[j][i]
- pSrc[j - 1][i] - pSrc[j][i - 1] - pSrc[j + 1][i] - pSrc[j][i + 1];
pDst[j][i] = static_cast<BYTE>(limit(sum));
}
}
하이부스트 필터
하이부스트 필터는 입력 영상의 명암비를 전체적으로 높여줌과 동시에 엣지를 강조함으로써 전체적으로 더욱 선명한 느낌이 드는 결과 영상을 생성
h(x, y) = α·f(x, y) - ∇^2 f(x, y)
void IppFilterHighboost(IppByteImage& imgSrc, IppByteImage& imgDst, float alpha)
{
int w = imgSrc.GetWidth();
int h = imgSrc.GetHeight();
imgDst = imgSrc;
BYTE** pSrc = imgSrc.GetPixels2D();
BYTE** pDst = imgDst.GetPixels2D();
int i, j, m, n, sum;
for (j = 1; j < h - 1; j++) {
for (i = 1; i < w - 1; i++) {
sum = (4 + alpha) * pSrc[j][i] - pSrc[j - 1][i] - pSrc[j][i - 1] - pSrc[j + 1][i]
- pSrc[j][i + 1];
pDst[j][i] = static_cast<BYTE>(limit(sum+0.5));
}
}
}
'Computer > 영상처리' 카테고리의 다른 글
컬러 영상 처리 (0) | 2023.06.06 |
---|---|
영상의 특징값 추출 방법 (0) | 2023.05.25 |
영상 새로 만들기 기능 구현(대화 상자 만들기) (0) | 2023.05.23 |
영상의 기하학적 변환 (0) | 2023.05.16 |
잡음 생성과 제거 (0) | 2023.05.09 |