本人最近一直在研究如何用算法自动实现证件照换背景的技术,比如拍摄时是白底、灰底的图片,如何将其背景换成蓝色或红色。就是功能类似于Photoshop CS4中的“滤镜-抽出”工具,可无论自己怎么尝试,发现和PS的效果有一定的差距。现在遇到的问题即是,边缘部分的处理效果始终不是很自然,不是原背景色还保留其中,就是将肤色处理得过多。
在这里先说下自己的大致实现思路:
1.先像PS抽出中一样,手动画出边缘的可能区域
2.在这个可能区域中找出边缘的过渡点
3.在这些边缘点在rgbR颜色空间上进行两步处理。第一步,消色。即在原图的基础上消去旧背景色的影响。第二步,做透明处理,以使新背景色在替换时显得自然
4.根据第3步中得到的边缘像素信息与新背景进行合并处理。这里关键的即是第3步中的两个处理。自己一直没有找到好的数学模糊对其进行运算~~最后在这请教,有无高人指定下,实现思路~~ 如果有兴趣的朋友也可以一起来讨论! QQ:992455695
在这里先说下自己的大致实现思路:
1.先像PS抽出中一样,手动画出边缘的可能区域
2.在这个可能区域中找出边缘的过渡点
3.在这些边缘点在rgbR颜色空间上进行两步处理。第一步,消色。即在原图的基础上消去旧背景色的影响。第二步,做透明处理,以使新背景色在替换时显得自然
4.根据第3步中得到的边缘像素信息与新背景进行合并处理。这里关键的即是第3步中的两个处理。自己一直没有找到好的数学模糊对其进行运算~~最后在这请教,有无高人指定下,实现思路~~ 如果有兴趣的朋友也可以一起来讨论! QQ:992455695
解决方案 »
- WebBrowser 图片残影问题
- 如何从Foxmail获得附件数量和路径(高分,不够可以加)
- 如何设置注册表中某个键的default值?
- 如何把硬盘上的图像文件加载到CMemFile中?
- 关于线程挂起问题
- 请教个位,用TCP还是UDP呀?
- 一个关于EDIT box 控件的绝对奇怪的问题!谢谢!
- 有沈阳的朋友吗?能说说现在沈阳的工作情况吗?
- 超越极限:程序如何抢在explorer.exe被加载之前启动,接管整个windows系统?
- 一个关于CEditView的问题!
- 如何判断系统是否是win7和windows 2003和XP
- mfc 怎样使悬浮窗口始终停靠在主程序框架的最右边,无论主程序框架变大还是变小
float s00 = tex2D(ImageMap, texCoord + float2(-off, -off)).r;
float s01 = tex2D(ImageMap, texCoord + float2( 0, -off)).r;
float s02 = tex2D(ImageMap, texCoord + float2( off, -off)).r; float s10 = tex2D(ImageMap, texCoord + float2(-off, 0)).r;
float s12 = tex2D(ImageMap, texCoord + float2( off, 0)).r; float s20 = tex2D(ImageMap, texCoord + float2(-off, off)).r;
float s21 = tex2D(ImageMap, texCoord + float2( 0, off)).r;
float s22 = tex2D(ImageMap, texCoord + float2( off, off)).r; // Sobel filter in X direction
float sobelX = s00 + 2 * s10 + s20 - s02 - 2 * s12 - s22;
// Sobel filter in Y direction
float sobelY = s00 + 2 * s01 + s02 - s20 - 2 * s21 - s22; // Find edge, skip sqrt() to improve performance ...
float edgeSqr = (sobelX * sobelX + sobelY * sobelY);
// ... and threshold against a squared value instead.
return edgeSqr > 0.07 * 0.07;用这个边缘算法看看