我试图将Matrix乘以其第一列。我试过这段代码:
A = imread('cameraman.tif');
x0 = A(:,1);
y = A*x0;
但是我收到以下错误:
使用*时出错 整数类不完全支持MTIMES。至少一个输入必须是标量。 要计算元素TIMES,请改用TIMES(。*)。
当我将代码更改为:y = A.*x0;
时,我得到:
使用时出错。* 矩阵维度必须一致。
当我使用whos
命令时,我得到了这个:
A是256x256矩阵,x0是256x1矩阵。我不知道我的代码有什么问题。
答案 0 :(得分:2)
imread
返回整数值。在执行乘法之前,必须首先将它们转换为double
的浮点数:
A = imread('cameraman.tif');
% Explicitly convert from integer datatype to double
A = double(A);
% NOW perform your multiplication
y = A * A(:,1);
使用whos
查看的重要事项是" Class"中列出的数据类型。柱:
A = imread('cameraman.tif');t
whos('A')
% Name Size Bytes Class Attributes
%
% A 256x256 65536 uint8
答案 1 :(得分:1)
如前所述,您需要将数据转换为双精度。您可以使用函数im2double
执行此操作。此功能也将标准化数据。
a = uint8(randi([0,100],3,3))
b=im2double(a)
b*255
b(1,:)*b
答案 2 :(得分:0)
您需要将矩阵转换为double或single。
Ad = double(A);
或:
As = single(A);
由于这是一个图像矩阵,请注意,imshow期望uint的值为[0,255],单/双值的值为[0,1]。因此要么在显示之前转换为整数或缩放。