Is this possible to convert a thick line or curve into its thinner version
5 ビュー (過去 30 日間)
古いコメントを表示
Is this possible to convert a thick line or curve into its thinner version in an image using Matlab / Octave? Please view the image. Right side curves (alphabets) are thicker and need to be converted into the left ones. i.e., a single line version is needed.
thanks
0 件のコメント
採用された回答
Ahmet Cecen
2014 年 11 月 18 日
Take an image with the best exposure possible, having high contrast between the paper white and font black. Use a simple tresholding method like Otsu's and get a BW binary image. Use:
a) erosion (imerode) with a disk structural element (strel)
or
b) use bwulterode
or
c) you can also use bwmorph with 'skel' option.
I am sure there are other ways to do it too. Just a couple simple ones that might help start.
3 件のコメント
Ahmet Cecen
2014 年 11 月 20 日
What's happening there is you are eroding on the white instead of black. You need to invert the image using:
BW=1-BW;
so that the pixels where the letters are have 1's on them (which means your image should have white letters and black background). Now try them again. I think Image Analyst is right the first 2 options would only work in very specific conditions, but give them a try anyways its good learning experience.
Image Analyst
2014 年 11 月 20 日
Then why did you accept it. If you had used my answer, it would have worked.
その他の回答 (2 件)
Image Analyst
2014 年 11 月 18 日
You can skeletonize it after thresholding.
binaryImage = grayImage < 128; % or whatever.
skeletonImage = bwmorph(binaryImage, 'skel', inf);
You cannot use imerode() because it will break apart your object into multiple objects. You cannot use bwulterode because it will shrink the blob down to a single point.
2 件のコメント
Image Analyst
2014 年 11 月 20 日
編集済み: Image Analyst
2014 年 11 月 20 日
It did not work because you did not do what I recommended . Look at the line where I thresholded. It will take everything that is darker than 128 and turn it white. Why did you not do that? You should notice that I even specifically said NOT to use bwulterode() or imerode(). All I can figure is that this reply was really meant for Ahmet, not for me. I know you accepted his answer already, but if you need any more help, feel free to ask.
baby
2014 年 11 月 24 日
1 件のコメント
Image Analyst
2014 年 11 月 24 日
Again, this is not my code. You took the skeleton of a2, which is not the binary image. The binary image is the badly-named "a". So you're still not doing what I suggested - perhaps the poor variable names confused you, that's why I recommend using descriptive variable names like grayImage, binaryImage, skeletonImage, etc. Please attach your original B image that you used so I can try it.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!