【问题标题】:Matlab freehand ROI pixel selectionMatlab手绘ROI像素选择
【发布时间】:2018-01-18 15:50:06
【问题描述】:

我正在尝试使用 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 返回双精度而不是整数。改用round(getPosition(h))

标签: matlab image-processing roi


【解决方案1】:

错误原因

错误来自 getPosition 函数以双精度格式返回其坐标的事实。您需要将其转换为 int 才能使分配工作。

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

实际解决方案

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

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

结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多