如何在C#中提取图像中的正面形状

时间:2015-04-21 20:09:38

标签: c# image-processing aforge

是否可以提取图像前面的任何形状?

让我们说我们前面有两个物体1的图像,另一个在后面,是一个空白或透明的背景。

我们可以提取前面的那个并将它放在一个新的图像中吗?

可以通过检测正面形状的边缘然后裁剪它来完成吗?

这篇文章正在接近我的问题:

Cropping Particular Region In Image Using C#

但我想完全自动化。

任何帮助都将受到高度赞赏。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我认为你不能完全自动化;然而,可能有一些半自动化的方式,至少,您需要一些先验信息,例如您的物体可以放置多远。以下是我的一些建议。

第一种方式(您有实施学术论文的经验,您有关于对象深度的一些先验信息),

  • 下载一个"场景 - 深度图像数据库"来自互联网
  • 获取数据库的平均值
  • 根据场景[1]
  • 的GISt查询输入图像的K-Nearest-Neighbors
  • 根据输入场景应用SIFT流以对齐数据库场景
  • 推断深度
  • 从图片中删除特定范围。

可以推断输入图像的粗略深度图。通过使用此功能,您将尝试推断输入图像的深度图,然后删除包含您的对象的特定深度范围。您可以查看论文[2]以获得更详细的说明。

enter image description here

来自http://www.the.me/wp-content/uploads/2013/09/z-depth_map_expanding_exif_more_powerful_post-processing_2n.jpg

的深度图示例

第二种方式(假设:在算法结束时允许人工输入。), - 分割图像(您可以通过一点点搜索找到最先进的算法) - 选择要删除的轮廓。

segmented image

来自http://vision.ece.ucsb.edu/segmentation/edgeflow/images/garden_edge.gif

的分段图片示例

<强>参考文献:

[1] Aude Oliva 场景要点

[2] Karsch,K。;刘,C。;康,S.B。 IEEE模式分析和机器智能交易(TPAMI),2014年。

答案 1 :(得分:0)

OpenCV提供了提取对象轮廓的选项。因此,将图像转换为灰度并将其转换为打开的CV,检测图像中的所有轮廓。并根据您的要求选择所需的轮廓。 由于你的项目是在C#上,你可以看一下Emgu CV,它是OpenCV的跨平台.Net包装器。 PL。请参阅以下网址,您可以在此下载Emgu CV的示例。

http://sourceforge.net/projects/emguexample/?source=recommended