[OpenCV 10] 영상 샤프닝

Sinaenjuni·2023년 7월 9일
0

OpenCV

목록 보기
10/25

샤프닝(Sharping)

언샤프 마스크 필터링(Unsharp mask filtering)

날카롭지 않은 (Unsharp; Blur) 영상을 이용해서 날카로운(Sharp) 영상을 생성하는 방법이다. 정리하면 블러된 영상을 원본 영상에서 빼면 날카로운 부분만 남게된다. 이 영상을 다시 원본 영상에 더하면 원본 영상은 보다 날카로운 영상이 된다.

dst=srcblrshp=dst=2srcblur(src)dst = src - blr shp = dst = 2 * src - blur(src)

위 그림과 같은 과정을 거친다.

Sharpning code

void ex_sharpning(){
    Mat src = imread("../data/rose.bmp", IMREAD_GRAYSCALE);
    Mat blr, dst;

    if (src.empty()) {
        cerr << "Image load failed!" << endl;
        return ;
    }
	
    // blur(src, blr, Size(3,3));
// or 
    GaussianBlur(src, blr, Size(), 2.0);
    dst = 2 * src - blr;
    
    imshow("src", src);
    imshow("sharp", dst); 
    // imshow("mean", dst); 

    waitKey();
}


샤프니스(Sharpness) 조절

샤프닝 정도를 조절할 수 있도록 상수(α\alpha)를 이용해서 강도를 조절한다.

dst=src+(srcblur(src))dst=src+α(srcblur(src))dst=src+αsrcαblur(src)dst=(1+α)srcαblur(src)dst = src + (src - blur(src)) \\ dst = src + \alpha * (src - blur(src)) \\ dst = src + \alpha * src - \alpha * blur(src) \\ dst = (1 + \alpha) * src - \alpha * blur(src)
void ex_sharpness(){
	Mat srcf, dst;
	Mat src = imread("../data/rose.bmp", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	imshow("src", src);

	src.convertTo(srcf, CV_32FC1);

	for (int sigma = 1; sigma <= 5; sigma++) {
		Mat blr;
		GaussianBlur(srcf, blr, Size(), sigma);

		float alpha = 1.0f;
		dst = (1.f + alpha) * srcf - alpha * blr;

		dst.convertTo(dst, CV_8UC1);

		String desc = format("sigma: %d", sigma);
		putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);

		imshow("dst", dst);
		waitKey();
	}

	destroyAllWindows();
}



0개의 댓글