PhotoShop算法实现进阶-锐化滤镜-自由锐化(二十七)

PhotoShop算法实现进阶-锐化滤镜-自由锐化(二十七)

[email protected]

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) ;
			}				
		}
	}

}
    测试效果:

拉普拉斯锐化(二十六)效果:



本文自由锐化效果:


作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。



你可能感兴趣的:(自由锐化,PhotoShop算法)