0

我在使用 imwrite 将 double 类型的矩阵转换为 image.iam 时遇到问题,但每次错误都是输入参数过多。矩阵的值从 0 到 255,但类型是 double。我使用 imread 打开图像,然后将其转换为二进制,然后使用命令 double 并尝试将其转换回图像。我需要我的 fyp 中的二进制形式,然后将其转换回图像。这怎么可能?如果有人有解决方案,请帮助我。谢谢!

4

3 回答 3

2

您可以使用im2double将值从uint8值转换为double值。相反,您可以使用im2uint8.

于 2012-05-16T11:45:19.510 回答
1

使用此代码:

I = imread('test.jpg');
b = dec2bin(I); % b becomes vector
% some actions with binary vector
du = bin2dec(b);
du = reshape(du,size(I)); % converting vector du to 3d Image array 
imwrite(uint8(du), 'du.jpg'); %save our du to file du.jpg

I = imread('du.jpg'); %test if it saved correctly
imshow(du) 
于 2012-05-19T14:21:44.273 回答
0

如果使用java调用matlab函数(java发送字节数组作为输入图像),首先将矩阵转换为无符号8位整数:

m1 = typecast(arr, 'uint8');

将输入设置为无符号整数后,您可以将这些像素值用作 (0, 255) 范围内的 RGB。如果你想使用像 conv2 这样的过滤器,你必须将无符号数组转换为图像双精度。可以是这样:

m2 = im2double(m1);

应用卷积生成双精度输出(0-1 之间)。在那之后,如果你想获得无符号值,你必须使用它:

m3 = im2uint8(m2);

特别是当您从 java 调用 matlab 时,将输入数组类型转换为 uint8 非常关键,因为 matlab 最初接收 java 字节数组作为有符号 int。解决这个问题非常痛苦,因此跟踪转换步骤可能会有所帮助!

于 2014-08-29T12:07:59.200 回答