MATLAB Answers

Ryan
0

bwlabel changing connectivity of image

Asked by Ryan
on 31 May 2012
I am trying to use BWLabel to label 1 pixel width line segments. These lines are not straight so I am using a connectivity of 8. When I run bwlabel and view the image of the newly labeled skeleton, it actually is changing layout, size and connectivity of the line segments. The input image is a double. I am using Matlab R2009b.
Am I asking bwlabel to be too sensitive? I am using this as part of a larger code that is trying to find the angle of these segments by using the segment endpoints, so maintaining separation is important.
Below is the code I used to generate the two supplied images
% A = image to be labeled.
figure(1), imshow(A)
A2 = bwlabel(A,8);
figure(2), imshow(A2)

  0 Comments

Sign in to comment.

2 Answers

Answer by Image Analyst
on 31 May 2012
 Accepted Answer

Your A image is not what you think it is. I'd bet that it is not a logical image, but a gray scale image with most pixels at 255 but some pixels at a much darker value. Do this
imhist(A);
and see what it shows. Do you have only 2 bins at 0 and 1? Or do you have bins at 0, 255, and, say, 20 or some small number?
You can also try this
A = (A == 255); % Convert to logical image with 1 only where A = 255.
and then label and see what you get.

  5 Comments

Ryan
on 1 Jun 2012
Ahhhh, thank you very much. You and Walter Roberson have taught me a lot. I have not had any training in image processing and am learning this on the fly, mostly by reading posts on here. I picked Matlab over other languages because of the image processing toolbox and the user community. Good stuff.
Ryan
on 1 Jun 2012
I also utilize 'help ....' all the time.
Ryan
on 1 Jun 2012
You were correct. I ran the 'unique' function that Stephen suggested and got [-1 0 1], so I just ran the im2bw command with a high threshold value and it solved the issue.

Sign in to comment.


Answer by Stephen
on 31 May 2012

I agree with Image Analyst. Is your image a jpg or has it been compressed? If so, there are little ghosts that lurk as low intensity values on certain pixels. bwlabel uses any value above 0 (or below?) so those sneaky pixels will get marked. Take a look at what a==0 looks like, or type unique(a) to see a list of the unique intensity values.

  0 Comments

Sign in to comment.