Sch*_*ken 11 c++ opencv model image-processing javacv
我的计划是从纸上绘制的平面图中提取信息.我已经设法检测到70-80%的拉门:
现在我想从墙上创建一个数据模型.我已经设法提取它们,你可以在这里看到:
从那我创造了轮廓:
我现在的想法是从该图像中获取线条的交叉点并从中创建数据模型.但是,如果我使用houghlines算法,我得到这样的东西:
有人对如何获得交叉点或甚至另一个想法如何获得模型有不同的想法?会很好的.
PS:我正在使用javacv.但是opencv中的算法也可以正常,因为我可以翻译它.
首先,也可以使用线段检测器来检测线条:http : //www.ipol.im/pub/art/2012/gjmr-lsd/
如果我理解正确的话,问题是您会为每个“真实”行获得几条不同的短行。您可以获取“短线”的所有端点并使用 fitLine() 近似一条交叉的线:http ://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=fitline#fitline
让我惊讶的是,你真正想要的不一定是墙壁,而是房间——顺便说一下,房间是由墙壁界定的。
此外,虽然看起来你的“墙”数据相当嘈杂(即有很多小部分可能会被误认为是小房间),但你的“房间”数据却不是(房间里没有很多幻影墙)房间中间)。
因此,检测房间(大约轴对齐的矩形,不包含超过特定阈值的白色像素)并通过查看附近像素之间的边界来推断墙壁可能是有益的。
我将分三个阶段实现这一点:首先,尝试从 houghlines 的输出中检测一些主轴(我将首先使用 K 均值聚类算法,然后调整输出以获得垂直轴)。使用此数据可以更好地对齐图像。
其次,开始在图像的黑色区域中随机播种小矩形。向各个方向“生长”这些矩形,直到每条边都遇到超过特定阈值的白色像素,或者它们遇到另一个矩形。继续播种,直到图像的大部分区域被覆盖。
第三,找到未被矩形覆盖的区域(希望也是矩形),并将它们折叠成线:
这种方法有一些缺点:
我很抱歉没有包含任何代码片段 - 但我认为传达想法比细节更重要(如果您希望我扩展其中任何内容,请发表评论)。另请注意,虽然我几年前使用过 opencv,但我绝不是专家 - 因此它可能已经有一些原语可以为您完成一些工作。
归档时间: |
|
查看次数: |
2938 次 |
最近记录: |