Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我已经在MATLAB中编写了一个图像处理程序,该程序大量使用了MATLAB图像处理工具箱,尤其是形态运算(imopen,imclose)以及不适当的调整。我们执行了很多样条拟合操作,并且也执行了medfilt2和medfilt1。
我们有一个客户希望我们将此程序转换为Java。我想听听Java图像处理库的详细说明,该库可以复制MATLAB在图像处理和样条曲线中的功能,尤其是接口与MATLAB的比较方式。 我已经阅读了有关Java的高级图像处理库的信息,但是在Web上找不到任何详细的文档。另外,我所读过的小文档似乎表明它使用了一个相当复杂的图像模型,将它们组合成图块等等。如果有一个Java库可以让我继续将灰度图像视为2D或3D数组,那就太好了。 此外,了解在MATLAB和Java之间进行转换的任何一般性陷阱也将是非常棒的。 编辑:我们的应用程序当前将一个相对简单的对象的图像进行细分。它: 1. Starts with a 3D matrix of gray scale image slices representing a single area 2. Does a medfilt1 to even out each slice. 3. Does some imopen, imclose and imadjust operations on the image to remove some fuzziness, 4. Does some simple thresholding in various areas to find boundary points 5. Fits splines to the boundary points, 6. Uses the 3rd dimension in various ways to further perfect the point matching, especially using medfilt2. 7. Saves each slice with the boundary splines written in color on it. 我应该注意,我们是在进行“样条拟合”,而不是样条匹配-样条拟合是具有固定结数的最小二乘匹配-样条匹配精确地以任意数量的结匹配点。我不想从更简单的样条函数中实现样条匹配。 您可以选择使用MATLAB的Builder JA,但我也想知道纯Java中可用的东西,以及Builder JA涉及哪种开销。 编辑2: 请注意,我们正在做脊柱拟合 -使用给定点与样条曲线的拟合度来决定是否消除它-由于数据杂乱无章 ,我们有一个多步点消除过程,因此,样条曲线是样条曲线不可分割的一部分算法。因此,由于在JAI中根本找不到任何样条曲线,因此,如果有人知道提供最小二乘样条曲线拟合的Java库,那就太好了。 编辑2.5:我们使用带有固定结数(0-5节)的样条的一组点的最小二乘近似值。如果我们必须重新实现这一点,事情将会变得扑朔迷离,因为现在我们正在使用MATLAB贡献的库。 而且,我们当然不想重访该算法。很难找到有用的东西... 回答: 有关将Matlab代码转换为Java代码的一些一般性陷阱。我已经将Matlab转换为C ++代码,所以我的建议来自这些经验。
样条拟合可能最好通过数字方法而不是库方法来完成。在JAI中可能有一种方法可以做到这一点,但是我对这种语言还不够熟悉。 取而代之的是,我会查阅《数字配方》,特别是第3章 ,以获得有关样条曲线拟合的代码。该代码基于一个代码,而不是基于零的代码,因此需要进行一些翻译,但这是完全可行的。 如果要尝试从边界中删除噪声点,则可能还需要尝试模糊化最初从中获得噪声点的边缘。在不知道要尝试进行样条拟合的情况下(有多种变体),很难推荐另一种语言的完全相同的样条。 编辑2.5:如果通过贡献库中的样条拟合,您是说类似此代码 ?如果情况变得更糟,那么您至少会拥有源代码。如果您最终不得不做这样的事情,那么另一个非常有用的提示是Matlab都是双精度的,除非您强行使用它,否则别无其他(即使那样,很多运算对非双精度也不起作用)。因此,您还需要将代码加倍以保持合理的协议。我还要进行几次测试。如果您确实要重写该代码(或类似的代码),那么拥有一组已知的输入和预期的输出(在一定的合理误差范围内,必须定义“合理”的意思)对于确保您要复制的轮子(不是真正重塑的轮子)的每转距离与原始转数相同。最后一句中可能有太多的名词表达。 另一个修改:如果上述所有内容都令人头疼,那么考虑一下JA构建器已指出的问题。否则,我概述的方法或类似方法可能会成为您最终的选择。 更多&回答... |
![]() |
![]() |