用Java实现MATLAB代码

用Java实现MATLAB代码,java,matlab,image-processing,Java,Matlab,Image Processing,我有以下用MATLAB编写的代码,摘自 此代码应将3通道RGB图像转换为其照明不变量。我想知道代码在做什么,以便用Java实现它 从我收集到的信息来看,它计算每个红/绿/蓝像素的对数,并相互减去值,但结果不是整数,因此在更改RGB值时,我无法将其应用于Java的BuffereImage类。如何在Java中模拟此函数?您可以根据需要在Java中找到许多矩阵库。我建议您可以选择将逻辑转换为Java。将函数转换为Java并不难。 下面的代码示例是一个MATLAB实现,可以直接转换为JAVA 您应该注意

我有以下用MATLAB编写的代码,摘自

此代码应将3通道RGB图像转换为其照明不变量。我想知道代码在做什么,以便用Java实现它


从我收集到的信息来看,它计算每个红/绿/蓝像素的对数,并相互减去值,但结果不是整数,因此在更改RGB值时,我无法将其应用于Java的
BuffereImage
类。如何在Java中模拟此函数?

您可以根据需要在Java中找到许多矩阵库。我建议您可以选择将逻辑转换为Java。

将函数转换为Java并不难。
下面的代码示例是一个MATLAB实现,可以直接转换为JAVA

您应该注意输入和输出元素的范围和类型,以及内存顺序

请阅读以下代码中的注释:

%function[ii_image]=RGB2照明变量(图像,alpha)
%初始化输入(用于执行示例):
image=imread('peppers.png');
图像=最大值(图像,1);%将零值替换为1,因为日志(0)是-Inf
image=double(image)/255;%将图像转换为范围[1/255,1]内的双精度图像。在JAVA中,如果pix是范围为[0255]的字节,则应该使用double(pix)/255。
α=0.9;
ii_image=0.5+log(image(:,:,2))-alpha*log(image(:,:,3))-(1-alpha)*log(image(:,:,1));
%假设JAVA中的元素存储在三个2D数组(3个平面)中:R、G、B
%例如:double[]R=newdouble[384][512];
%在Matlab中,3个平面为:
R=图像(:,:,1);
G=图像(:,:,2);
B=图像(:,:,3);
%II_图像=0.5+对数(G)-α*对数(B)-(1-α)*对数(R);
II_图像=零(大小(R));
%等效于循环(易于在JAVA中实现):
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
图像宽度=大小(图像,2);
图像高度=大小(图像,1);
对于y=1:image\u height%迭代行,JAVA:for(y=0;y