例如,我按照以下内容开始阅读一些图像:
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
有关吗?在这种情况下可以做些什么?
`
答案 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 = imfreehand
或h = imfreehand(gca)