http://blog.csdn.net/kezunhai
通过 PhotoShop算法实现进阶-锐化滤镜-拉普拉斯锐化(二十六)可以看到,虽然图像处理的更清晰了,差异明细了,但处理后的图像在视觉上比较难以接受。主要原因就是特性太过于锐化了,对于日常中的美化来说不适用。因此有必要对锐化的锐化度进行调节,以达到更满意的视觉效果。本文介绍的算法还是与PhotoShop算法实现进阶-锐化滤镜-拉普拉斯锐化(二十六)相同,唯一的不同点就是通过调节锐化度来调整视觉效果。具体做法还是先用拉普拉斯算子,然后根据指定的锐化度与之相乘,再与原始图像相加。
算法实现:
void PhotoShop::FreeSharp(Mat& img, Mat& dst, float sharpDegree /* = 0.1 */) { 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; for ( i=border; i<height-border; i++) { unsigned char* dstData = (unsigned char*)dst.data + dst.step*i; for ( j=border; j<width-border; j++) { for ( k=0; k<chns; k++) { int sum = 8*getPixel(img, i, j, k) - getPixel(img, i-1, j-1, k) - getPixel(img, i-1, j, k) - getPixel(img, i-1, j+1, k) - getPixel(img, i, j-1, k) - getPixel(img, i, j+1, k) - getPixel(img, i+1, j-1, k) - getPixel(img, i+1, j, k) - getPixel(img, i+1, j+1, k) ; //dstData[j*chns+k] = saturate_cast<uchar>(dstData[j*chns+k] + sum); dstData[j*chns+k] = saturate_cast<uchar>(sum*sharpDegree+0.5) ; } } } }测试效果:
拉普拉斯锐化(二十六)效果:
本文自由锐化效果: