在MATLAB中添加两个图像

时间:2013-11-18 22:36:03

标签: image matlab

我正在尝试将激活贴图覆盖在基线脉管系统图像上,但我在下面得到同样的错误:

  

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?

3 个答案:

答案 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的文档,这两张图片必须是:

  

具有相同大小和类的非稀疏数值数组

要使uint8uint16图片匹配,请使用im2uint8im2uint16函数进行转换。或者,只需重新缩放和演员(例如b_uint8 = uint8(double(b)*255/65535);)。

请注意,在某些版本的MATLAB中存在显示16位图像的错误。修复程序取决于图像是RGB还是灰度,以及平台(Windows vs. Linux)。如果您在显示16位图像时遇到问题,请使用具有此修复程序的imshow,或对imageimagesc之后的整数数据类型图像使用以下代码:

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必须是标量双

一般解决策略

  1. 错误发生在哪一行
  2. 尝试了解错误消息

    一个。 " ...必须具有相同的尺寸......"

    • 检查输入的大小。
    • 尝试理解给定(类型)输入参数的代码含义。错误信息是否合理?
    • 你想达到什么目标?
    • 有用的命令size A:返回A
    • 的大小

    " ...必须拥有相同的班级......"

    • 检查输入参数的数据类型。
    • 哪种常见数据类型合理?
    • 将其转换为所选的数据类型。
    • 有用命令: whos A:返回A的所有元信息,即大小,数据类型......
  3. 实施解决方案:您最喜爱的搜索引擎和matlab文档是您最好的朋友。

  4. 高兴:你解决了问题并学到了新的东西。

答案 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');