날카롭지 않은 (Unsharp; Blur) 영상을 이용해서 날카로운(Sharp) 영상을 생성하는 방법이다. 정리하면 블러된 영상을 원본 영상에서 빼면 날카로운 부분만 남게된다. 이 영상을 다시 원본 영상에 더하면 원본 영상은 보다 날카로운 영상이 된다.
위 그림과 같은 과정을 거친다.
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();
}
샤프닝 정도를 조절할 수 있도록 상수()를 이용해서 강도를 조절한다.
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();
}