Matlab徒手感兴趣区像素选择

Matlab徒手感兴趣区像素选择,matlab,image-processing,roi,Matlab,Image Processing,Roi,我试图使用imfreehand(…)将一幅图像中的选定区域替换为另一幅图像中的相应区域 这是我目前的代码: % Sample images: I1=imread('office_1.jpg'); I2=imread('office_5.jpg'); imshow(I1) h = imfreehand; wait(h); pixels = getPosition(h); x = pixels(:,1); y = pixels(:,2); for i = 1:numel(x) I1(y(

我试图使用imfreehand(…)将一幅图像中的选定区域替换为另一幅图像中的相应区域

这是我目前的代码:

% Sample images:
I1=imread('office_1.jpg');
I2=imread('office_5.jpg');

imshow(I1)
h = imfreehand;
wait(h);
pixels = getPosition(h);

x = pixels(:,1);
y = pixels(:,2);

for i = 1:numel(x)
   I1(y(i), x(i), :) = I2(y(i), x(i), :);
end

imshow(I1)
然而,我得到的错误是:“索引必须是正整数或逻辑。”在这种情况下,我不知道为什么会出现这种错误以及如何纠正它


任何解释都将不胜感激。

错误原因

该错误源于getPosition函数以双精度格式返回其坐标。您需要将其强制转换为int才能使赋值生效

x = int16(pixels(:,1));
y = int16(pixels(:,2));
实际解决方案

然而,您的代码并没有完全按照您的期望执行。getPosition函数返回沿imfreehand中创建的遮罩边界的点列表。如果要实际替换其内部,则应从中提取二进制掩码,例如:

binaryImage = h.createMask();
[y,x] = find(binaryImage);
结果


我认为
getPosition
返回的是double而不是整数。请尝试取而代之的
round(getPosition(h))