Connecting nearby pixels of binary image doesn't work with imopen() and imclose()

2 次查看(过去 30 天)
Hy everyone!
I'm writing program that must recongnise nearby pixels in binary images as lines. For example in picture below, right pixels should represend cross and in the left side, white pixels should represend the line. From picture you can see, that there are many dots that should be connectet together in line. The problem is also, that anomalys can be in random angles, shapes and dimensions. I want to make sure, that pixels that are close enought together represent line or other shape (cross), but morphological operations like imopen() and imclose() doesn't work well. I also did a lot of changing structure element to solve this, bit since anomalys are totaly random I cannot define proper structure element. I must also maintain the anomalys dimensions, for example, lenght of lines.
Any suggestions for solving my problem?

回答(2 个)

Image Analyst
Image Analyst 2016-5-30
Of course imopen() won't work. That erodes the blobs, making them smaller, before dilating the smaller blobs.
You can use imline() to burn lines into the image. See attached demo.
Or use edge linking. Demo attached.
Or what is probably the best option, just use a better segmentation routine in the first place so that the lines are better to begin with.
  1 个评论
Image Analyst
Image Analyst 2016-5-30
Regarding your "Answer", you can pass in x and y to imline() to have it draw between some points without user interaction, but then you get the advantage of having it return the binary image of it. So it can be "automatic" if you pass it some lines. That said, like I said, the best way is not to try to fix a crummy segmentation but to get a better segmentation to begin with.

请先登录,再进行评论。


Andraz Skoda
Andraz Skoda 2016-5-30
编辑:Andraz Skoda 2016-6-2
Thank You very much for answer!
Ok, so let me try to use better segmentation technique. So..I have to segment errors on the surface like in the picture bellow:
The problem that I have with segmentation is that this errors appear as randomly shaped structures, like dots, scratches,... AND also contrast of surface is changing (some ''healty'' reagions are recognized as errors beacouse of nad contrast). For now I used simple tresholding to get binary image like I posted in the previous question. If I settup higher threshold value for getting binary picture for evalueting errors, of course then I get the right shape of errors(cross and line above are seen better), but also some of the ''healthy'' part of the surface, that should not be error is recognised as error.
My questions are:
How can I equalize contrast in my picture of surface? What will be better way for segmentation of errors: a) To equalize contrast of surface b) Use some kind of addaptive thresholding tehnique? What is your suggestions for solving my problem of segmentation?
I also find some interesting post here about adaptive tresholding. I think I am looking for some code (that I don't have yet,beacouse the code in this post doesn't work for me...) that do something like at picture bellow:
Tnx everyone!
  3 个评论
Andraz Skoda
Andraz Skoda 2016-6-2
编辑:Image Analyst 2016-6-3
OK. How can I do indicate that the post is NOT solved yet? Uncheck "Accept this answer"?
Image Analyst
Image Analyst 2016-6-3
Yes. So, upload your original gray scale picture, and your script. You might try things like imtophat or imbothat, or adapthisteq.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by