我有一个代码来裁剪输入图像的连接组件,输入,通过从二值图像的标签地图,标签图( labelledmap,labelcount =bwlabel,8)中找到边界条件;
我刚开始使用matlab所以这听起来很愚蠢..。问题是,我无法将不同的裁剪图像存储在同一个变量中,因为matlab似乎将已经存在的图像和新裁剪的图像的末端合并,也就是说,它正在存储两个裁剪图像之间的完整映射,就像我所看到的那样:/
这是使用不同变量存储裁剪图像(我想要的输出类型) 使用不同的变量存储裁剪图像的输出的输出

这是我通过将裁剪图像存储在同一个变量(没有帮助的) 将裁剪图像存储在同一个变量中时输出中获得的输出。

我试着使用一个大小数组,大小等于所产生的标签的总数,但结果是一样的。另外,在循环的每一次迭代之后,我尝试了清除输出令牌映像ltoken,但这没有帮助。
那么,有没有可能显示单个裁剪的图像。此外,裁剪图像的数量可能有数千张,所以我想使用一个循环来编码它们的裁剪机制。
这是附加代码的一部分。(预先谢谢;)
for h=1:labelcount
for i=1:r
for j=1:c
if labelledmap(i,j)==h
if i<ltop
ltop=i;
end
if i>lbottom
lbottom=i;
end
if j<lleft
lleft=j;
end
if j>lright
lright=j;
end
end
end
end
if ltop>5
ltop=ltop-5;
end
if lbottom<r-5
lbottom=lbottom+5;
end
if lleft>5
lleft=lleft-5;
end
if lright<c-5
lright=lright+5;
end
lwidth=lright-lleft;
lheight=lbottom-ltop;
ltoken=imcrop(input,[lleft ltop lwidth lheight]);
figure('Name', 'Cropped Token'), imshow(ltoken);
clearvars ltoken;
end发布于 2013-11-26 12:55:59
h的每次迭代初始化ltop、lbottom、lleft和lright。我认为这就是为什么你把剪裁的图像“粘”在一起的原因。regionprops获取每个标签的'BoundingBox'属性。下面是一个例子
st = regionprops( labelledmap, 'BoundingBox' );
imlist = cell( 1, numel(st) ); % pre-allocate
for ii=1:numel(st)
r = st(ii).BoundingBox;
% I understand you want to increase the BB by 5 pixels at each side:
r(1:2) = r(1:2) - 5; % start point moves -5
r(3:4) = r(3:4) + 10; % width and height increases by 10
imlist{ii} = imcrop( input, r );
end您的代码显式地遍历所有像素,只是为了找到搜索框,我仍然有些震惊。这不是matlab做事情的方式。
如果您坚持不使用regionprops,下面是查找ii-th边界框的一种更简单的方法:
imsk = (labeledmap == ii); % create a binary map with True for ii-th region
xFlat = any(imsk,1); % "flattening" imsk on the x-axis
lleft = find( xFlat, 1, 'first' );
lright = find( xFlat, 1, 'last' );
yFlat = any(imsk, 2);
ltop = find( yFlat, 1, 'first' );
lbottom = find( yFlat, 1, 'last' );在图像坐标上没有循环。
https://stackoverflow.com/questions/20216003
复制相似问题