Matlab手绘ROI像素选择

Matlab freehand ROI pixel selection

我正在尝试使用 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)

但是,我收到以下错误:"index must be a positive integer or logical."在这种情况下,我不确定为什么会出现此错误以及如何更正它。

任何解释将不胜感激。

错误原因

错误来自于 getPosition 函数 returns 它是双精度格式的坐标。您需要将其转换为 int 才能使作业生效。

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

实际解决方案

但是,您的代码并不完全符合您的预期。 getPosition 函数 returns 在 imfreehand 中创建的沿掩码边界的点列表。如果你想真正替换它的内部部分,你应该从中提取二进制掩码,例如:

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

结果