How to find minimum number of largest square of 1 in an 2D bool matrix
3 次查看(过去 30 天)
显示 更早的评论
I have a 2D bool image (dimension 81x65) with several irregular regions black(mainly in the middle) and other pixes white(mainly in the outer part).
Is there a way to split the white region into square pieces as large as possible, and get the position and size for each square?
Thanks.
4 个评论
Walter Roberson
2019-10-20
What would be the desired output in the above case? And should all of the square be the same size?
采纳的回答
Walter Roberson
2019-10-20
D = bwdistgeodesic(logical(YourImage), ~YourImage);
Now iterate. if there are no finite values in D, break the loop. Find the largest value in D. It is at the corner of a square of white pixels of that dimension, but you will need to do a little work to figure out which corner it is. When you have figured out which corner it is, record that square location and then set all the D locations inside that square to be inf or nan. Now return back to the beginning of the loop (looking for the largest remaining value)
This is a "greedy" algorithm. It makes no attempt at all to be consistent in block sizes. If there were a situation in which two squares of equal size plus one small square would cover a section, then the algorithm would instead take the larger square leaving the rest to be broken up into a number of smaller squares.
0 个评论
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!