matlab矩阵相乘问题,到底哪里出错了?如下图,左边错误提示,右边源代码.
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/07/09 01:56:27
matlab矩阵相乘问题,到底哪里出错了?如下图,左边错误提示,右边源代码.
![](http://img.wesiedu.com/upload/0/14/0144a82a3230ce77f7e0202bd27e38ac.jpg)
![](http://img.wesiedu.com/upload/0/14/0144a82a3230ce77f7e0202bd27e38ac.jpg)
![matlab矩阵相乘问题,到底哪里出错了?如下图,左边错误提示,右边源代码.](/uploads/image/z/6524493-69-3.jpg?t=matlab%E7%9F%A9%E9%98%B5%E7%9B%B8%E4%B9%98%E9%97%AE%E9%A2%98%2C%E5%88%B0%E5%BA%95%E5%93%AA%E9%87%8C%E5%87%BA%E9%94%99%E4%BA%86%3F%E5%A6%82%E4%B8%8B%E5%9B%BE%2C%E5%B7%A6%E8%BE%B9%E9%94%99%E8%AF%AF%E6%8F%90%E7%A4%BA%2C%E5%8F%B3%E8%BE%B9%E6%BA%90%E4%BB%A3%E7%A0%81.)
楼上几位似乎都没有找到问题的真正症结. 出现这个错误的原因是,读入的boy.jpg是一个真彩图像,所以对应的i是一个三维数组,而矩阵乘法(*)只能对两个二维数组进行(其中一个可以是标量). 看楼主代码的意图,应该是想要显示图片中间一个方形区域的内容,而把其余部分设置为黑色.这可以通过以下两种方式来做. 1、按照真彩图像显示,此时b也应该定义为三维数组:i=imread('boy.jpg');
i=im2double(i);
b=zeros(size(i));
b(50:150,50:150,:)=1;
n=b.*i;
imshow(n) 2、如果按照二维数组来做,则需要把图像转为灰度图像:i=imread('boy.jpg');
i=rgb2gray(i);
i=im2double(i);
b=zeros(size(i,1),size(i,2));
b(50:150,50:150)=1;
n=b.*i;
imshow(n) 注意:1、两种做法都应该使用点乘(.*)而非矩阵乘(*).2、第二种做法对变量 b 赋值的那两句也可以使用第一种做法对应的两句,效果相同.
i=im2double(i);
b=zeros(size(i));
b(50:150,50:150,:)=1;
n=b.*i;
imshow(n) 2、如果按照二维数组来做,则需要把图像转为灰度图像:i=imread('boy.jpg');
i=rgb2gray(i);
i=im2double(i);
b=zeros(size(i,1),size(i,2));
b(50:150,50:150)=1;
n=b.*i;
imshow(n) 注意:1、两种做法都应该使用点乘(.*)而非矩阵乘(*).2、第二种做法对变量 b 赋值的那两句也可以使用第一种做法对应的两句,效果相同.