Matlab徒手ROI像素选择

时间:2018-01-18 06:45:13

标签: 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(i), x(i), :) = I2(y(i), x(i), :);
end

imshow(I1)

但是,我得到的错误是:“索引必须是正整数或逻辑。”在这种情况下,我不确定为什么会出现此错误以及如何纠正错误。

非常感谢任何解释。

1 个答案:

答案 0 :(得分:1)

错误原因

错误来自于getPosition函数以double格式返回其坐标的事实。你需要将它强制转换为int才能使赋值工作。

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

实际解决方案

但是,您的代码并没有完全符合您的预期。 getPosition函数返回沿imfreehand创建的蒙版边界的点列表。如果你想要实际替换它的内部部分,你应该从中提取二进制掩码,例如:

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

<强>结果

enter image description here