我正在研究感兴趣区域教程集here,并且有一些事情让我无法理解。
创建用于设置ROI的二进制掩码的示例是
img = imread('pout.tif');
h_im = imshow(img);
e = imellipse(gca,[55 10 120 120]);
BW = createMask(e,h_im);
我知道椭圆imellipse
用于创建ROI对象。因此,按照自己的页面here,我会详细了解它,但是在该页面上没有解释gca
是什么?它所说的是它是一个hparent并指定椭圆的HG父级。我不明白这可以请一些人详细说明。我可以用别的东西代替gca吗?什么是gca?
同样在此行中,imshow
函数已分配给h_im
,然后进一步使用。当我使用示例图像安装时,我得到了这个值h_im = 1.740099
,因此h_im
是一个双倍值。
这里进一步使用BW = createMask(e,h_im);
我理解这些是参数含义:
BW = createMask(h,h_im)返回与图像h_im大小相同的掩码 在ROI对象h内有1s,在外面有0s。这个语法是 当包含ROI的轴包含多个图像时需要。
图像的大小是1.740099
吗?测量哪个单位?
当我在Matlab中写下最后一行时,我收到了以下错误:
>> BW = createMask(h,h_im);
??? Invalid or deleted object.
Error in ==> imroi>imroi.parseInputsForCreateMask at 78
h_ax = ancestor(obj.h_group,'axes');
Error in ==> imroi>imroi.createMask at 264
[obj,h_im] = parseInputsForCreateMask(varargin{:});
为什么我收到此错误?
谢谢
答案 0 :(得分:2)
gca是一个将句柄返回到当前轴的函数。类似地,h_im是imshow创建的图像对象的句柄。您可以阅读有关使用Mathworks here中的句柄的更多信息。
检查句柄时看到的数字与图像的属性(大小等)无关 - 值可能与对象类型有关,但基本上它们是Matlab用来跟踪打开的标识符图形对象。因此,当您调用imellipse时,您将把一个句柄传递给椭圆将出现的轴,并返回e
中的另一个句柄。
e = imellipse(gca,[55 10 120 120]);
或者代替gca
,您可以使用另一个指向不同轴的手柄。例如,如果你有:
a1 = subplot(1,2,1), h1 = imshow(img1)
a2 = subplot(1,2,2), h2 = imshow(img2)
然后您可以使用a1
或a2
代替gca,具体取决于您想要创建roi的图像。
如果你关闭包含图像和椭圆的图形,那些句柄将被删除 - 这就是你得到错误'无效或删除对象'的方法。一旦你使用了createMask
并返回了你想要的面具,就可以关闭这个数字。