PhotoShop算法实现进阶-锐化滤镜-钝化蒙版(二十八)
钝化模板(Unsharp Mask)是在图像边缘的侧面制作出一条对比度较强的晕光,给图像目标以反衬效果,从而达到突出目标,使图像清晰化的作用。
实现原理:先根据用户指定的钝化度对图像进行高斯模糊处理,再对高斯模糊处理结果与原图像进行钝化处理。 钝化度用来改变像素间的对比度强弱,钝化度,取值(0~100),钝化值越小,钝化的部分就越窄,仅仅会影响边缘像素; 钝化值越大,钝化的范围越宽,效果更明显。
算法实现:
// degree:钝化度,取值(0~100) // 钝化度用来改变像素间的对比度强弱,钝化值越小,钝化的部分就越窄,仅仅会影响边缘像素 // 钝化值越大,钝化的范围越宽,效果更明显 void PhotoShop::UnsharpMask(Mat& img, Mat& dst, int degree) { if (degree<1) degree = 1; if (degree>100) degree = 100; if ( dst.empty()) dst.create(img.rows, img.cols, img.type()); int height = img.rows; int width = img.cols; int chns = img.channels(); int border = 1; int i, j, k; img.copyTo(dst); for ( i=0; i<degree; i++) { GaussianBlur(dst, dst,3,1.0); } for ( i= 0; i<height; ++i) { const unsigned char* srcData = (const unsigned char*)img.data+ img.step*i; unsigned char* dstData = (unsigned char*)dst.data+dst.step*i; for ( j=0; j<width; ++j) { for ( k=0; k<chns; k++) { dstData[j*chns+k] = saturate_cast<uchar>( 2*srcData[j*chns+k] -dstData[j*chns+k]); } } } }
实现效果第一张图:
还满意吧,一张不够,再来一张:
从上面两图可以看到,图像的对比度有显著的增强,视觉效果也更好,再来一张单色背景的:
通过调节钝化度,来获取需要的效果,再来一张图: