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.
无标题.png
  4 个评论
Walter Roberson
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?
raym
raym 2019-10-20
编辑:raym 2019-10-20

The square can be any size and with different sizes. The key is to split white pixels into less squares, so some of the square should have large area.

请先登录,再进行评论。

采纳的回答

Walter Roberson
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 个)

类别

Help CenterFile Exchange 中查找有关 Interpolation 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by