I call java functions which return what is supposed to be a uint8 image with values from 0 to 255.
import java.ij.*;
I = ij.ImagePlus('filepath'); %read an 8bit image from file to java.ij.ImagePlus object
Idata= Ip.getImageStack().getImageArray(); %getImageArray() an array of Java Byte s
Idata % a matlab array of int8 values
In Java, it's a ByteArray with 8-bit entries. On returning the data to matlab, the Byte type gets automatically converted to int8, not uint8.
https://uk.mathworks.com/help/mps/java/conversion-of-java-types-to-matlab-types.html
The numbers are in range -127 to 128, not 0 to 255.
How can I force the Java Byte to be interpreted as uint8, OR convert matlab int8 to uint8 afterwards?

 採用された回答

Jan
Jan 2023 年 3 月 1 日

0 投票

siz = size(Idata);
Idata = reshape(typecast(Idata(:), 'uint8'), siz);

3 件のコメント

Jason Klebes
Jason Klebes 2023 年 3 月 2 日
arrayfun(@(x) typecast(x,'uint8'), Idata)
Jan
Jan 2023 年 3 月 2 日
Why arrayfun? Does this indirection have a benefit?
Jason Klebes
Jason Klebes 2023 年 3 月 3 日
I thought to save on a reshape operation and a line, but actually your vectorized version is much faster.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCall Java from MATLAB についてさらに検索

質問済み:

2023 年 3 月 1 日

コメント済み:

2023 年 3 月 3 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by