首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >机器人手臂喷绘笔画生成算法

机器人手臂喷绘笔画生成算法
EN

Stack Overflow用户
提问于 2022-07-07 12:31:29
回答 2查看 111关注 0票数 2

我正在编写一个代码,生成一幅图片(栅格图像)的开始点和结束点,以让机器人手臂绘制。

我写了一个算法,但是有太多重叠的笔画:https://github.com/Evrid/Painting-stroke-generation-for-robot-arm-or-CNC-machine

我的算法的输入:

和50 ThresholdOfError的输出(它镜像并重新分配给我的颜色)(您可以看到笔画是重叠的):

值得注意的是:

*笔画必须不重叠(如果重叠,则笔画太多)

*绘画有不同的颜色,同样的颜色最好画在一起

*笔画的大小就像矩形

*一些染色区域被断开,就像从向日葵的黄色下面:

我不确定我应该使用哪种算法,以下是我考虑过的一些可能的算法:

方法1.Generate 50k (或更多)随机方向和位置较大的矩形,如果其面积重叠相同的颜色区域,而不是重叠其他矩形,然后保持它,然后减少生成的矩形大小,并在几轮后继续减少。

方法2.Extract特定颜色,然后生成任意方向和位置的大矩形(我们有较少的面积和计算时间)

方法3.Do边缘检测,然后沿边缘方向生成矩形,如果其区域重叠于同一颜色区域,而不重叠其他矩形,则保持该区域,然后减小生成的矩形大小,并在两轮后继续减小。

方法4:生成随机圆,让笔画点代替(但可能导致太多点)

关于我应该使用哪种算法,有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-08 06:59:18

首先,我想:

  1. Quantize您的图像到您的调色板

因此,将颜色减少到您的调色板(请参阅:)

代码语言:javascript
复制
- [Effective gif/image color quantization?](https://stackoverflow.com/a/30265253/2521214)
- [Converting BMP image to set of instructions for a plotter?](https://stackoverflow.com/a/36820654/2521214)

用相似的颜色

  1. segmentate你的图像

为此,可以使用flood fill或growth创建ROI形式的标签(区域索引)。

请参阅Fracture detection in hand using image proccessing

  1. for每个ROI创建填充路径与粗画笔

这是简单的孵化,您可以通过在ROI的主要方向上生成具有“大”画笔宽度的锯齿状路径来实现这一点,因此可以使用AABBOBBPCA来检测主方向(ROI最大的方向),以及使用多边形ROI来检测主方向。

  1. for每个ROI创建带有“瘦”画笔的轮廓路径

这也被称为轮廓提取,只需选择选定的ROI的边界像素,那么您就可以使用ROI边界上的A*将像素分成2半(或者更多,如果复杂的形状带有孔或薄的部分),所以backtrack the pixels然后重新排列它们形成一个闭环。

这将保留边界上的细节(同时使用粗刷填充)。

就像这样:

如果您的颜色是可组合的,您可以使用CMY颜色空间和Substractive color mixing,并分别处理每一个C,M,Y通道(最多3重叠笔画)有更好的颜色匹配。

如果您想要更好的颜色,您也可以添加dithering,但是这会大大降低画图的速度,因为它需要更多的路径段,而且对于工具上下移动的绘图仪来说也不是最理想的(它们更适合打印头或打印,而不需要额外的移动…)。要部分克服这个问题,可以使用partial dithering,其中可以指定所创建的抖动量(导致较少的分段)。

--有很多东西你可以改进/添加到这里,比如:

从ROI中删除轮廓(为了限制重叠和防止细节overpaint)

  • do所有填充,然后所有轮廓都会根据ROI大小

  • 设置填充画笔宽度,调整填充孵化模式以更好地匹配您的手臂kinematics

  • order ROIs )

  • 填充超过一个画笔宽度以保留边界附近的细节
票数 1
EN

Stack Overflow用户

发布于 2022-07-07 12:38:57

建议你使用洪水填充算法。

当整个图片被覆盖时,按颜色对矩形进行排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72897867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档