现在的位置: 首页 > 综合 > 正文

PhotoShop算法实现进阶-锐化滤镜-钝化蒙版(二十八)

2017年01月23日 ⁄ 综合 ⁄ 共 1114字 ⁄ 字号 评论关闭

PhotoShop算法实现进阶-锐化滤镜-钝化蒙版(二十八)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai

        钝化模板(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]);				
			}		
		}
	}	
}

       实现效果第一张图:

还满意吧,一张不够,再来一张:

         从上面两图可以看到,图像的对比度有显著的增强,视觉效果也更好,再来一张单色背景的:


        通过调节钝化度,来获取需要的效果,再来一张图:



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


抱歉!评论已关闭.