我正在尝试将激活贴图覆盖在基线脉管系统图像上,但我在下面得到同样的错误:
X和Y必须具有相同的大小和类别,否则Y必须是标量的双倍。
我将每个调整为400x400,所以我认为它可以工作,但没有骰子。有什么我想念的吗?对于我正在开发的GUI来说,这是相当直接的。任何帮助将不胜感激。
a=imread ('Vasculature.tif');
b = imresize (a, [400,400]);
c=imread ('activation.tif');
d= imresize (c, [400,400]);
e=imadd (b,d);
可能是比特深度还是dpi?
答案 0 :(得分:2)
我认为你的一个图像是RGB(size(...,3)==3
),另一个是灰度(size(...,3)==1
)。假设脉管系统图像a
是灰度的,激活图像c
是RGB。要将a
转换为RGB以匹配c
,请使用ind2rgb
,然后添加。
aRGB = ind2rgb(a,gray(256)); % assuming uint8
或者,你可以aRGB = repmat(a,[1 1 3]);
。
或者将激活图像放入灰度:
cGray = rgb2gray(c);
另外,根据imadd
的文档,这两张图片必须是:
具有相同大小和类的非稀疏数值数组
要使uint8
和uint16
图片匹配,请使用im2uint8
或im2uint16
函数进行转换。或者,只需重新缩放和演员(例如b_uint8 = uint8(double(b)*255/65535);
)。
请注意,在某些版本的MATLAB中存在显示16位图像的错误。修复程序取决于图像是RGB还是灰度,以及平台(Windows vs. Linux)。如果您在显示16位图像时遇到问题,请使用具有此修复程序的imshow
,或对image
或imagesc
之后的整数数据类型图像使用以下代码:
function fixint16disp(img)
if any(strcmp(class(img),{'int16','uint16'}))
if size(img,3)==1,
colormap(gray(65535)); end
if ispc,
set(gcf,'Renderer','zbuffer'); end
end
答案 1 :(得分:1)
chappjc的答案很好,我想为如何解决错误信息的问题添加更一般的答案
X和Y必须具有相同的大小和类别,或者Y必须是标量双
一般解决策略
尝试了解错误消息
一个。 " ...必须具有相同的尺寸......" :
size A
:返回A 湾" ...必须拥有相同的班级......" :
whos A
:返回A的所有元信息,即大小,数据类型...... 实施解决方案:您最喜爱的搜索引擎和matlab文档是您最好的朋友。
答案 2 :(得分:-1)
一个简单的代码:
a=imread ('image1.jpg');
b=imresize (a, [400,400]);
subplot(3,1,1), imshow(b), title('image 1');
c=imread ('image2.jpg');
d= imresize (c, [400,400]);
subplot(3,1,2), imshow(d), title('image 2');
[x1, y1] = size(b) %height and wedth of 1st image
[x2, y2] = size(d) %height and wedth of 2nd image
for i = 1: x1
for j = 1: y1
im3(i, j)= b(i, j)+d(i, j);
end
end
subplot(3,1,3), imshow (im3), title('Resultant Image');