영상 날카롭게 만들기

2023. 6. 7. 09:42Computer/영상처리

언샤프 마스크 필터링 기법을 이용한 영상 날카롭게 만들기

 

영상을 날카롭게 만드는 것(샤프닝Sharpening 또는 크리스프닝Crispening) -> 영상 내의 엣지 부분을 강조하여 영상을 더욱 선명한 느낌으로 만들어주는 영상 처리 기법이다.

 

언샤프 마스크 필터링 기법

부드러워진 영상을 이용

c-(픽셀 값에 128을 더함)

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)를 뺀 것, 여러 번의 연산을 수행하는 대신 하나의 마스크를 이용하는 형태로 엣지가 강조된 날카로운 영상을 만들 수 있다.

이산 함수 f(x, y)에서 x 방향으로 일차 미분
함수 f를 x 방향으로 이차 편미분
함수 f를 이차원 영상이라고 할 경우, 이 영상에 대한 이차 미분 함수

 2 연산자가 이차 미분을 나타내는 연산자이며, 라플라시안(Laplacian) 또는 델 스퀘어del square라고 읽는다.

이 수식을 마스크 형태로 만든 것이 라플라시안 필터 마스크이다.

(b)는 함수 f를 가로, 세로, 양 대각선 방향으로 모두 미분 연산을 수행할 경우를 나타내는 마스크이다.
라플라시안 필터 적용 결과, 결과 영상에서 회색으로 나타나는 부분은 라플라시안 필터 수행 결괏값이 0에 가까운 부분이고, 엣지 근방의 흰색 또는 검정색으로 표현된 픽셀은 라플라시안 결괏값이 큰 양수 또는 음수 값을 갖는 픽셀

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을 더해서 흰색부분이 회색으로 보인다.
    }
}

라플라시안을 이용한 언샤프 마스크 필터

f(x, y) - ∇ ^2f(x, y)

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