我有多边形的图像.这些多边形有黑线.我需要一种方法来删除这些黑色线条与最小的多边形改变.到目前为止我尝试了什么:
Step 1) parse the image from the top left corner to the bottom right corner(line by line).
Step 2) Loop through each pixel of a line/row.
Step 3) If you encounter a non-black pixel, put the color value of it in
a variable (lets call it lastNonBlack).
Step 4) If you encounter a black pixel, just overwrite it's color value with lastNonBlack.
Run Code Online (Sandbox Code Playgroud)
这是该算法的问题.在某些情况下,它会分割多边形(请参见第一张图片),或者用一条线将多边形展开(参见第二张图片).


然后我尝试了另一种方法,我采用上面的像素的颜色,但也不起作用.不是"分裂"和"扩展"不是水平的而是垂直的.
PS:我使用Java所以java解决方案最好但是因为这是一个算法问题,所以欢迎任何人:)
编辑:上面的图片是构建示例,向您展示问题.我的图片看起来像这样:

edit2:我用更大的图像替换了更好的图像
我有100个PNG文件,每个都是8250x4090大.我需要将它们与Imagemagick一起附加到一个大的PNG文件(82500 x 40900),这样我就有10行10列.我知道代码必须如何,但我得到错误:convert.exe:无法扩展缓存
`C:\Row_345.png': No space left on device @ error/cache.c/OpenPixelCache/3689.
convert.exe: Memory allocation failed `C:\Row_345.png' @ error/png.c/WriteOnePNGImage/8725.
Run Code Online (Sandbox Code Playgroud)
第一个问题:需要多少空间(大约)?我有8 GB的Ram和30 GB的免费SSD,这还不够.这些图片包含多达5种不同颜色的多边形和线条.最大的PNG是300 KB)第二个问题:有没有办法让它变得更聪明,以至于它不会占用那么多空间?
我有一个像这样的字符串hello, "darkness, my", (old, friend),我想要这个分割的结果:
hello
"darkness, my"
(old, friend)
我找到了一种忽略 "-marks ( ,?=([^\"]*\"[^\"]*\")*[^\"]*$) 中逗号的方法和另一种忽略括号中逗号的方法 ( ,(?=[^\\)]*(?:\\(|$)))。
当我使用第一个时,我得到:
hello
"darkness, my"
(old
friend)
当我使用第二个时,我得到:
hello
"darkness
my"
(old, friend)
但是我该如何结合这两种解决方案呢?
我很难理解数独求解器的这一部分.我不知道扩展功能如何工作.
expand :: Matrix Choices -> [Matrix Choices]
expand m =
[rows1 ++ [row1 ++ [c] : row2] ++ rows2 | c <- cs]
where
(rows1,row:rows2) = break (any (not . single)) m
(row1,cs:row2) = break (not . single) row
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?简短的解释将非常有帮助.
我需要知道如何将 imagemagick 命令行命令转换为 java im4java 代码命令行:
convert -limit memory 40GiB -define registry:temporary-path=F:\\imageMagick Row_1.png Row_2.png -append Row_12.png"
Run Code Online (Sandbox Code Playgroud)
我知道如何在im4java中使用convert和-append,但是-define和-limit呢?这是我得到的:
IMOperation op = new IMOperation();
op.addImage("Row_1.png","Row_2.png");
op.appendVertically();
op.addImage("Row_12.png");
cmd.run(op);
Run Code Online (Sandbox Code Playgroud)
也许只是添加op.limit("memory 40GiB")和op.define("registry:temporary-path=F:\\imageMagick")?不知道是不是一样。。
我有两种不同的算法,它们将图像作为输入.图像具有不同颜色的多边形.该算法"简化"了这些多边形(使它们具有较少的角和边)并去除了太小的多边形.
这两种算法的工作方式不同,我想知道哪一种更接近原始图像哪一种更好.我遇到过这个,但这并不是我想要的.
这两个图像
,
应该具有50%的相似性,但根据该算法,它们的相似性为80%.
我还找到了一个名为ImageMagick的工具,可以比较两个图像.但我不确定输出的含义是什么以及如何使用它们来解决我的问题.