2016-08-01 254 views
0

我试图乘以矩阵的第一列。我曾尝试这样的代码:矢量矩阵乘法

A = imread('cameraman.tif'); 
x0 = A(:,1); 
y = A*x0; 

,但我得到了以下错误:

Error using * MTIMES is not fully supported for integer classes. At least one input must be scalar. To compute elementwise TIMES, use TIMES (.*) instead.

,当我我的代码更改为:y = A.*x0;我再次得到:

Error using .* Matrix dimensions must agree.

当我使用whos命令,我得到这个: A是一个256x256矩阵和x0是一个256x1矩阵。我不知道我的代码有什么问题。

回答

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重要的是这是在“类别”列中的数据类型:

A = imread('cameraman.tif');t 
whos('A') 

%  Name   Size    Bytes Class  Attributes 
%  
%  A   256x256    65536 uint8 
0

您需要将矩阵转换为双精度或单精度。

Ad = double(A); 

或:

As = single(A); 

由于这是一个图像矩阵,请注意,imshow预计值是在[0,255]范围为UINT和[0,1]的单/双。所以要么在显示之前退回到整数或缩放。

1

如前所述,您需要将数据转换为双精度。您可以使用功能im2double来完成此操作。这个函数也会标准化数据。

a = uint8(randi([0,100],3,3)) 
b=im2double(a) 
b*255 
b(1,:)*b