如何在MATLAB中求多尺度结构元素问题
我在学数学形态学,其中有一个多尺度形态学的。其理论是:大尺度的结构元素由小尺度的结构多次膨胀得到。但我在用imdilate对小尺度的结构元素做膨胀时,总是出错。不知道为什么。
如下:
se=strel();
se1=imdilate(se,se);
这样的话就是出错,那就是不对了。请问谁知道该怎么得到大尺度的结构元素啊?谢谢!
[ 本帖最后由 eight 于 2008-4-7 16:01 编辑 ]
回复 楼主 的帖子
什么错误有错误提示吗 出现了下面的错误。但我还是不知道怎么实现。头大了!!
??? Error using ==> images\private\checkinput>check_classes
Function IMDILATE expected its first input argument, IM,
to be one of these types:
logical, uint8, int8, uint16, int16, uint32, int32, single, double
Instead its type was strel.
Error in ==> images\private\checkinput at 35
check_classes(A, classes, function_name, variable_name, argument_position);
Error in ==> images\private\morphop>CheckInputImage at 254
checkinput(A, {'numeric' 'logical'}, {'real' 'nonsparse'}, ...
Error in ==> images\private\morphop>ParseInputs at 102
A = CheckInputImage(A, func_name);
Error in ==> images\private\morphop at 14
[A,se,pre_pad,...
Error in ==> imdilate at 121
B = morphop(A,se,'dilate',mfilename,varargin{:}); 问题已解决。 可以说说怎么解决的么?
我正在研究数学形态学呢。:handshake 因为strel函数的第一个参数必须是浮点型或者是整型,而我的se不是啊,所以在做膨胀的时候可以根据形态学的性质,运用结合律,先用结构元素去膨胀图像1,得到图像2,在下一个尺度下,用结构元素去膨胀2,再得到3。
可是看别人的论文上说是多尺度结构元素是用基本结构元素自我膨胀得到,但问题是IMDILATE函数的第一个参数不能是STREL结构的啊,我还是想不出来怎么解决这个问题。哪位大侠帮帮忙,怎么得到多尺度的结构元素啊?谢谢啦!qq:182544257。
[ 本帖最后由 francisfang 于 2008-4-6 16:31 编辑 ] 原帖由 francisfang 于 2008-4-6 12:57 发表 http://www.chinavib.com/forum/images/common/back.gif
因为strel函数的第一个参数必须是浮点型或者是整型,而我的se不是啊,所以在做膨胀的时候可以根据形态学的性质,运用结合律,先用结构元素去膨胀图像1,得到图像2,在下一个尺度下,用结构元素去膨胀2,再得到3。
可 ... 试试强制类型转换 不能啊,没有办法转换。唉!急!!!:@Q 原帖由 francisfang 于 2008-4-8 08:37 发表 http://www.chinavib.com/forum/images/common/back.gif
不能啊,没有办法转换。唉!急!!!:@Q
:'(哥们儿,我也急了好久了,跟你一样的问题,一直没法解决,叫天天不应叫地地不灵 是啊。论文上都是那么说的,但具体怎么实现就不知道了。 版主,帮帮忙啊,我找了很久了,可还是找不到答案,:'( 。谢谢了!! see=;
se=strel(see);
se1=imdilate(see,se);
这样呢? 这样也不行,膨胀几次就不变化了,因为你的see是固定大小的。 :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( :'( 还没有解决呀
回复 13楼 的帖子
我觉得可能是这样的:根据数学形态学的理论,图像A被结构元素B膨胀后,图像A的size应该是会变大的,但是imdilate这个命令可能剪切掉了膨胀的边缘,并没有使图像A变大。对于多结构元素来说,显然实现不了大尺度的结构元素。我想有两种途径:1.不要用matlab自带的膨胀命令,根据膨胀运算规则自己编写
2.如果一定要用imdilate的话,比如你想以为单位结构元素(此时尺度为1)求取尺度为5以内的多尺度结构元素时,可以这样:
scale = 5; % the largest scale of the struct element
nhood = ; % the size of the unit struct element
size_unit = size(nhood,1);
size_largest = size_unit + (scale-1)*(size_unit-1); % the size of the largest struct element
bm = zeros(size_largest); % image
bm(5,6) = 1; bm(7,6) = 1;bm(6,5) = 1; bm(6,7) = 1;
se1 = strel(nhood); % unit struct element
se2 = imdilate(bm,se1);
se3 = imdilate(se2,se1);
se4 = imdilate(se3,se1);
se5 = imdilate(se4,se1);
尺度为2、3、4、5的结构元素虽然从大小上来看都是为11的方阵,但是因为其中元素为“1”的个数不同,是可以起到多尺度元素的作用的
话比较啰嗦,代码也不精炼,不知道我表达清楚了没有?
[ 本帖最后由 mulan 于 2008-5-20 11:14 编辑 ]
页:
[1]
2