在程序中使用imfreehand

时间:2013-08-01 11:40:25

标签: matlab region roi

例如,我按照以下内容开始阅读一些图像:

I=input('image name: ','s');
img=double(imread(I));

我打算只在该图像的某些部分上工作。所以,我注意到为此我可能需要h=imfreehand

因此,我在上面的两行下插入了h=imfreehand。我得到的是一个白色的屏幕。那么,我如何获得图像并选择我想要的区域?另一件事是,我如何告诉我的程序只能在我选择的区域上工作?

感谢。

更新

我在部分代码中执行了以下操作:

figure, imshow(img);
h = imfreehand;
position = wait(h);

% post processing
se=strel('disk',3);
erosion=imerode(h,se);
result_image=imsubtract(h,erosion);.

但是,我收到了以下错误:

Error using imerode
Expected input number 1, IM, to be one of these types:

numeric, logical

Instead its type was imfreehand.

Error in morphop>CheckInputImage (line 335)
validateattributes(A, {'numeric' 'logical'}, {'real' 'nonsparse'}, ...

Error in morphop>ParseInputs (line 166)
A = CheckInputImage(A, func_name);

Error in morphop (line 14)
[A,se,pre_pad,...

Error in imerode (line 123)
B = morphop(A,se,'erode',mfilename,varargin{:});

Error in program (line 155)
erosion=imerode(h,se);

erosion有关吗?在这种情况下可以做些什么?

`

3 个答案:

答案 0 :(得分:4)

按照matlab documentation中的建议尝试:

I=input('image name: ','s');
img=imread(I);
figure, imshow(img);
h = imfreehand;
position = wait(h); 

修改

文档建议作为替代

figure, imshow(img);
h = imfreehand(gca);

答案 1 :(得分:2)

尝试将绘图的句柄传递给imfreehand()

I=input('image name: ','s');
img=double(imread(I));

figure;
ih=image(img);
h=imfreehand(ih)

抱歉,我没有图像处理工具箱来测试它。

答案 2 :(得分:2)

似乎将您的图片(可能是uint8)转换为double会导致出现问题。

我要么:

  • 使用图像的原始编码(例如img_uint8 = imread('coins.png')使用整数编码)。问题是您可能无法使用imfreehand,因为它需要读取双精度浮点数或单精度浮点数。
  • 使用img_double = double(imread('coins.png'))转换图片,以便imfreehand可用。但转换会导致显示问题,您可以绕过imshow(img_double,[]) imshow(img_double, [min(min(img_double)), max(max(img_double))])的类似物。它强制imshow正确使用全范围的数据(255 Vs 255.0)

因此,最好的选择是第二个选择。

要使用imfreehand,@ Try Hard会给出一个很好的代码h = imfreehandh = imfreehand(gca)