Graphics 如何识别此图像中的矩形?
我有一个水平线和垂直线的图像。事实上,这张图片是英国广播公司网站转换成水平线和垂直线的。 我的问题是,我希望能够找到图像中的所有矩形。我想写一个计算机程序来找出所有的矩形。 是否有人知道如何做这件事,或者就如何开始提出建议?这个任务对于我个人来说很容易找到可视矩形,但我不知道如何将其描述为一个程序 图为英国广播公司网站Graphics 如何识别此图像中的矩形?,graphics,artificial-intelligence,machine-learning,computer-vision,Graphics,Artificial Intelligence,Machine Learning,Computer Vision,我有一个水平线和垂直线的图像。事实上,这张图片是英国广播公司网站转换成水平线和垂直线的。 我的问题是,我希望能够找到图像中的所有矩形。我想写一个计算机程序来找出所有的矩形。 是否有人知道如何做这件事,或者就如何开始提出建议?这个任务对于我个人来说很容易找到可视矩形,但我不知道如何将其描述为一个程序 图为英国广播公司网站 为了更新这一点,我编写了代码,将BBC网站图像转换为水平线和垂直线,问题是这些线在拐角处不完全相交,有时它们不完全形成矩形。谢谢 从左到右迭代,直到达到彩色像素,然后使用修改的
为了更新这一点,我编写了代码,将BBC网站图像转换为水平线和垂直线,问题是这些线在拐角处不完全相交,有时它们不完全形成矩形。谢谢 从左到右迭代,直到达到彩色像素,然后使用修改的泛光填充算法。关于algo的更多信息另一种方法是找到图像上的任何彩色像素,然后使用
while(pixel under current is colored)
{
lowest pixel coordinate = pixel under current
current = pixel under
}
然后向上做同样的事情。
现在你已经定义了一条直线。然后使用线的端点将线近似匹配为矩形。如果它们不是像素完美的,你可以做一些树状折叠。泛光填充可以工作,或者你可以使用边缘跟踪算法的修改 你要做的是: 创建一个2d数组(或任何其他d2数据结构)-每行表示屏幕上的水平像素线,每列表示垂直线 从左到右遍历所有像素,每当发现彩色像素时,将其坐标添加到数组中 遍历数组并查找行,并存储每个行的开始和结束像素(不同的数据结构)
知道每一行的开始是它的左/上像素,你可以很容易地检查任何4行是否包含一个矩形假设它是一个合理的无噪声图像(不是屏幕的视频),那么简单的泛光填充算法之一应该可以工作。您可能需要对图像进行放大/腐蚀以缩小间隙 查找直线的常规方法是Hough变换(然后以直角查找直线) Opencv是最简单的方法
看看这个问题有几种不同的方法解决您的问题。我会用一个像这样的工具。您将可以灵活地定义“矩形”,即使它不是“完全闭合的”(填充算法将失败)
另一种可能是使用一种方法,这种方法基本上是数据驱动的,而不是像前一种方法那样的定义驱动的。你必须给你的算法几个关于矩形是什么的“例子”,它最终会学习(以a和错误率)。我相信你在寻找答案。在计算机视觉中,有一种称为广义的算法,可能可以解决你的问题。应该有开源代码实现了这个算法。只需搜索它。要从几乎接触的水平线和垂直线的图像中获得矩形,请执行以下操作:
(来源:)neat。创建图像使用的是什么程序?您是否可以使用其源代码(识别框以便绘制它们)用于您自己的目的?或者您是否只有最终的.png图像可供使用?您的示例图像很有帮助,因为它提出了一个重要的问题。其中有许多形状近似于矩形,但它们是不同的由于间隙而不完整,通常在拐角处。您是否在寻找所有完美的矩形或形状,大部分近似于矩形?后者将更难确定。您能否分享您的结果,以及您是如何获得上述图形的?我的浏览器说链接下的网站是一个报告攻击页面。您可以重新上传吗加载图像?方法简单,但需要大量编码
011 => 011
011 => 001 all other white pixels touch, so eliminate
011 => 011
010 => 010
010 => 010 top pixel would become disconnected, so leave
010 => 010
010 => 010
010 => 000 touches only one white pixel, so remove
000 => 000
010 => 010
111 => 111 does not touch black pixels, leave
010 => 010
010 => 010
011 => 011 other pixels do not touch. so leave
000 => 000