bwlabel changing connectivity of image

7 次查看(过去 30 天)
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)

采纳的回答

Image Analyst
Image Analyst 2012-5-31
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 个评论
Ryan
Ryan 2012-6-1
I also utilize 'help ....' all the time.
Ryan
Ryan 2012-6-1
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.

请先登录,再进行评论。

更多回答(1 个)

Stephen
Stephen 2012-5-31
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.

Community Treasure Hunt

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

Start Hunting!

Translated by