java 读取图片给 matlab_如何将MATLAB图像处理程序转换为java?

将Matlab代码转换为Java代码有几个一般的缺陷.我将Matlab转换成C代码,所以我的建议来自于这些经验.

>如果你在Matlab中使用for循环,一般来说,你做错了.添加矩阵(图像等)是相当简单的:

a = b c;

不管图像的大小.过滤也是一个相当简单的调用:

a = imfilter(‘median’,b); #or这样的事情,我现在不在我的matlab机器的前面.

类似的函数调用存在于JAI(Java Advanced Imaging)中,因此可以查看是否可以找到它们.我不知道你的中位数过滤要求的具体细节(我认为medfilt1是一个3×3的本地中值过滤内核,而不是数据上运行的一维过滤内核,因为这意味着你只能在一个过滤器方向),所以看看the documentation.中有什么但是,如果你自己编写,上面的内容可以像一个双重嵌套的for循环一样简单,或者是一个复杂的类,实现类似于

MyMatrix a = MyMatrix.Add(b,c);

我的观点是,Matlab的简单性可以掩盖您需要做出的所有设计决策,以使其成为一个高效的java程序.

>记住,当你做循环,matlab和java有反向行/列顺序. Matlab是专栏,java是row-major.你将需要重写你的循环来考虑这个变化,否则你的代码会比它慢.

>就个人而言,除了我需要完成的具体操作之外,我会倾向于避免JAI.例如,只需将其用于中值过滤操作等等.我认为使用它是一个优化,但这只是因为我是老学校,而且首先要写我自己的图像处理操作.如果您采用这种方法,您可以将代码编写为您想要的代码,然后可以添加JAI调用,并确保输出与您的代码已经相符.在C中使用诸如JAI或Intel IPP之类的高级库的问题是存在很多特定于库的陷阱(如平铺),或者每一行是否分配像位图一样具有几个额外的像素,或其他这样的细节),并且您不想处理这些问题,同时移动您的代码. JAI很快,但它不是一个魔法子弹;如果你不知道如何使用它,更好地确保你有一些东西,你有一些快速.

>如果我可以在线条之间读一点点,看起来你正在对医学成像数据进行某种分割.我不知道在DICOM图像中读取什么是java库,但gdcm适用于C和C#,还有java包装器. Matlab掩盖了图像处理的便利性,特别是DICOM图像处理,因此您可能会发现自己必须学习一些DICOM库才能处理图像文件操作.多年来,我学到了DICOM标准的一小部分; specification是非常完整的,也许太过分了,但你可以弄清楚如何做你所需要做的令人难以置信的细节.如果您正在尝试分割医疗数据,则将样条曲线保存在数据上是不正确的事情,以使您的图像与其他DICOM读取器一起运行.看一下轮廓线的规定.

编辑响应更多信息:

样条拟合可能最好从数字方法而不是图书馆方法完成.可能有一种方法可以在JAI中执行此操作,但我对该语言不够熟悉.

相反,我会查看数字食谱,特别是Chapter 3,用于样条拟合的代码.代码是一个基础,而不是零基础,所以它需要一些翻译,但它是完全可行的.

如果你想从边界去除噪点,你可能还想尝试模糊你最近得出的点的边缘.不知道您想要做的样条曲线(有很多变体),很难用另一种语言推荐一个完全相同的结果.

编辑2.5:如果通过拼图从一个贡献的图书馆,你的意思是像this code?如果最糟糕的情况是最糟糕的,你至少要有源代码.如果你最终不得不做这样的事情,另一个非常有用的提示是,Matlab是双重的,没有别的,除非你强制它(即使这样,很多操作不适用于非双打).所以,为了保持合理的协议,你还需要用双打代码.我也做了几个测试.如果你最终重写代码(或类似的东西),拥有一组已知的输入和预期的输出(在一定的合理的误差范围内,你必须定义什么是“合理”的意思),这对于确保您正在复制的轮(不是真正重新创造)与原始距离相同.在最后一句话中可能有太多的泛化表达.

另一个编辑:如果上面所有的都太头痛了,那么考虑JA建设者已经指出了.否则,我概述的方法,或类似的方法,可能是你最终的地方.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值