# Check if nxm block of 1s is inside binary matrix

조회 수: 5(최근 30일)
Andrew Poissant 2018년 10월 5일
편집: Bruno Luong 2018년 10월 5일
I have a 90x89 binary matrix (see attached). In short, the 1s are good and 0s are bad. I want a quick way to check and return any nxm blocks of all 1s within the large matrix. For example, I want to find out if there are any 3x6 (n=3, m=6) blocks of all 1s within the binary matrix. If there are, return the row and col for each cell within each block.

댓글을 달려면 로그인하십시오.

### 채택된 답변

Bruno Luong 2018년 10월 5일
편집: Bruno Luong 2018년 10월 5일
[i,j] = find(conv2(MM_bin,ones(3,6),'same')==3*6);
I was testing with MM_bin in your MATFILE file which is an 2D array (a matrix in short) that contains 0/1.
If you test on other array with more dimensions than 2, then it's normal that you get error.
##### 댓글 수: 4표시숨기기 이전 댓글 수: 3
Bruno Luong 2018년 10월 5일
편집: Bruno Luong 2018년 10월 5일
Yes the return index is shifted by half index for even size.
To compensate, dimension indexes of the box is (so single (i,j) pair)
wi = 3;
di = (wi-1)/2;
ibox = ceil(i-di) : ceil(i+di);
wj = 6;
dj = (wj-1)/2;
jbox = ceil(j-dj) : ceil(j+dj);
% MM_bin(ibox,jbox) == ones(3,6);

댓글을 달려면 로그인하십시오.

### 추가 답변(1개)

Bruno Luong 2018년 10월 5일
편집: Bruno Luong 2018년 10월 5일
[i,j] = find(conv2(MM_bin,ones(3,6),'same')==3*6);
will return you all the positions (i,j) with 3*6 submatrix of ones centered at this position.
##### 댓글 수: 1표시숨기기 없음
Andrew Poissant 2018년 10월 5일
Error using conv2
N-D arrays are not supported.
Error in FM5_LowBattery_newLZ (line 197)
[ii,jj] = find(conv2(MM_bin_land_windowed,ones(3,6),'same')==3*6);

댓글을 달려면 로그인하십시오.

### 범주

Find more on Matrix Indexing in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by