在Matlab中将double类型的矩阵转换为image

时间:2012-05-16 11:37:04

标签: matlab image-processing

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

3 个答案:

答案 0 :(得分:2)

您可以使用im2doubleuint8值转换为double值。对于反向,您可以使用im2uint8

答案 1 :(得分: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) 

答案 2 :(得分: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字节数组为signed int。解决这个问题非常痛苦,因此跟踪转换步骤可能会有所帮助!