Odd Outcome From imerode and bwlabel

Hello,
I am trying to program a shape placement algorithm using image processing in Matlab.
The algorithm should place images of shapes on a larger background image in a way that minimizes the wasted background. I am using imerode to erode the current background image with the bounding box of the shape to be placed as the structuring element. Thus, imerode should return an image with 1's everywhere where the origin of the structuring element can be placed so that it is entirely contained within the background image. Imerode does this correctly. However, when I use bwlabel on the image returned from erosion for further processing, an image of the structuring element appears in the bottom left corner. I don't understand why this is happening. I'm sure it would help to see the images that I am refering to but I don't think pictures can be attached to this question. Can anyone explain please? Any help would be greatly appreciated. Thank you.

댓글 수: 2

Sean de Wolski
Sean de Wolski 2011년 10월 17일
Use a free image hosting website and give us the link. Also, post the code and use formatting so we can see what MATLAB is _actually_ doing.
http://www.mathworks.com/matlabcentral/answers/7924-where-can-i-upload-images-and-files-for-use-on-matlab-answers
Sean de Wolski
Sean de Wolski 2011년 10월 17일
Welcome to MATLAB Answers!

댓글을 달려면 로그인하십시오.

답변 (2개)

ssklios Sklios
ssklios Sklios 2011년 10월 24일

0 개 추천

Thank you so much for responding. Here are examples of the images in question:
Notice the strange image in the bottom right of the bwlabel image. I will upload some of the code shortly. Thanks again!
ssklios Sklios
ssklios Sklios 2011년 10월 29일

0 개 추천

Here is the part of my code that has to do with imerode. currentpart is an image of a shape to be placed and current scene is the background that the shape has to be placed on. I first rotate the shape image to align with the background. Then make the structuring element the image of the bounding box of the shape. Then erode the structuring element into the current scene.
%rotate
partrot=RotObject(currentpart,angles(b));
partrot=bwlabel(partrot);
partstats=regionprops(partrot,'BoundingBox','Image');
%Extend current scene
bb=minBoundingBox(partrot);
LH=lengthheight(bb);
L=LH(1);
H=LH(2);
currentscene(1,1)=currentscene(1,1)+H*cos(backanglerads-pi/2)+L*cos(backanglerads);
currentscene(1,2)=currentscene(1,2)+H*sin(backanglerads-pi/2)+L*sin(backanglerads);
currentscene(2,1)=currentscene(2,1)+H*cos(backanglerads-pi/2);
currentscene(2,2)=currentscene(2,2)+H*sin(backanglerads-pi/2);
currentscene(4,1)=currentscene(4,1)+L*cos(backanglerads);
currentscene(4,2)=currentscene(4,2)+L*sin(backanglerads);
[r c]=size(fullscene);
M = poly2mask(currentscene(:,1), currentscene(:,2), r, c);
currentscene=immultiply(M,fullscene);
%Make structuring element
S=strel(partstats.Image);
strelcent=floor((size(partstats.Image)+1)/2);
boxcent=[partstats.BoundingBox(2)+strelcent(1) partstats.BoundingBox(1)+strelcent(2)];
%make placement
pos=imerode(currentscene,S);
posL= bwlabel(pos')';

카테고리

도움말 센터File Exchange에서 MATLAB에 대해 자세히 알아보기

질문:

2011년 10월 17일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by