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