Java BufferedImage,写入底层光栅,像素在最终图像中出现偏移

Posted

技术标签:

【中文标题】Java BufferedImage,写入底层光栅,像素在最终图像中出现偏移【英文标题】:Java BufferedImage, writing to underlying Raster, pixels are appearing offset in the final image 【发布时间】:2012-06-05 07:24:17 【问题描述】:

为线程死灵致歉,我已尝试制作精简版进行测试,可在此处获得

https://www.dropbox.com/sh/y0wtlae37yltfz5/yRDSyKj2NY

下载的最大部分是 src 文件夹中的 3 个示例图像(其中 2 个是医疗级眼底图像,所以它们有点大)。抱歉,如果解决方案的整体规模仍然有点大,但我不能在不认真重新考虑的情况下将其缩小(我承认我有点睡眠不足,必须在 20 分钟内开始工作)。

我原来对问题的描述如下

我的问题就是这样。我有一个人类视网膜的BufferedImage,现在使用自适应阈值我已经成功地从眼睛中提取了血管结构,我的软件的其余部分处理绘制血管并确定它们的厚度,我相信这是正常的. 最终结果显示所有坐标与它们的实际位置有相当程度的偏移(仔细观察,您可以看到一些正确连接的种子的曲率跟随血管,并且坐标跟随图像的圆周。 我的问题是,造成这种偏移的原因是什么,我该如何补救?

【问题讨论】:

抱歉,请注意,似乎较小的 Jpeg SampleIMage 在显示红色像素方面做得更好,它们在大图像中太小了。 +1,刚加入,遵守提问规则! 如需尽快获得更好的帮助,请发帖SSCCE。 好吧,我已经制作了该项目的精简版,以便放在这里。 dropbox.com/sh/y0wtlae37yltfz5/yRDSyKj2NY 导航到 Odin 文件夹并下载 zip 或单个 java 文件,将它们转储到您的 IDE 中编译它们并运行 OdinMain 应该足以让球滚动。此时在弹出的文件浏览器窗口中打开其中一个Jpegs,该控件底部的三个按钮控制分配给图像的一些功能,首先选择RB Filter,然后选择Adaptive Thresholder,然后选择Vein Tracker。 如果您想获得帮助,您确实需要创建一个简单的自包含示例。没有人真的想下载一堆文件,将它们放入 IDE 中,然后它们会为您解决问题。也许您的示例代码可以从 Internet 获取源图像。 【参考方案1】:

坐标没有偏移,但是它们的比例是错误的:红色像素坐标被缩放了 0.75(可能)。在 OdinVeinThicknessGen.java 的第 333 行尝试替换

wRast.setPixel(x6, y6, redVal);

通过

wRast.setPixel(x6 * 4 / 3, y6 * 4 / 3, redVal);

我不知道为什么,你应该更快找到它,因为你比我更了解你的代码……;-)


请注意,在询问您的下一个问题时,您确实应该提供Short, Self Contained, Correct (Compilable), Example(正如 Andrew 和 Steve 在他们的 cmets 中所建议的那样),因为这需要大量工作(并且需要很多时间在这里很多人不需要)有或想要采取)如果你不承认你的问题。谢谢!

编辑:我刚刚查看了您的原始问题(即在您进行编辑之前)。虽然它不包含 SSCCE,但它包含一些代码和有用的信息,以便更好地找到应用程序中的相关部分。在我看来,最好让问题保持原样,然后将链接添加到整个项目。红色像素更好识别(例如更大的点)的示例图像也会有所帮助。请不要误会我的意思,我只是想为您将来的问题提供一些意见……:-)

【讨论】:

以上是关于Java BufferedImage,写入底层光栅,像素在最终图像中出现偏移的主要内容,如果未能解决你的问题,请参考以下文章

使用 Polygon 裁剪光栅文件并使用相同的文件名写入输出

Java Gif 读写

Java BufferedImage / Android 位图

Java BufferedImage 内存消耗

如何从 java 中的组件获取 BufferedImage?

JAVA中BufferedImage的用法