0

例如,我开始我的程序如下读取一些图像:

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是不是跟 在这种情况下可以做什么?

`

4

3 回答 3

4

按照 matlab文档中的建议试试这个:

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

编辑:

该文档建议作为替代方案

figure, imshow(img);
h = imfreehand(gca);
于 2013-08-01T11:51:26.423 回答
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 与 255.0)

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

要使用imfreehand,@Try Hard 提供了一个不错的代码h = imfreehandh = imfreehand(gca)

于 2013-08-01T12:42:46.940 回答
2

尝试将情节的句柄传递给imfreehand()

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

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

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

于 2013-08-01T11:51:07.610 回答