Average of the nine surrounding cells

조회 수: 3 (최근 30일)
Ahmed Abdulla
Ahmed Abdulla 2020년 5월 29일
댓글: Stephen23 2020년 5월 29일
I have two matrices, matrix1 contains genuine data and matrix2 is filled with 0's and a few 1's, i wanted to know if there is a way to calculate the average of all 9 cells surrounding the cell with the 1 in the matrix with the genuine data. i.e when a 1 is spotted in matrix2 then the average of the 9 surrounding cells to the corresponsinding cell in matrix1 is calculated.
Im not sure if this is clear

채택된 답변

Stephen23
Stephen23 2020년 5월 29일
편집: Stephen23 2020년 5월 29일
Use conv2 to calculate the averages, e.g.:
out = matrix2.*conv2(matrix1,ones(3,3),'same')/9;
  댓글 수: 2
Ahmed Abdulla
Ahmed Abdulla 2020년 5월 29일
this is works great thank youu!
Only one problem, if the 1 was in the first column then the average is disrupted because there are no cells to the left but we are still dividing by 9. how can i do the same but divide by 6 and only considering the 1's in the first column of the matrix
Stephen23
Stephen23 2020년 5월 29일
Instead of dividing by 9 you could divide by a matrix of the same size, where each element's value gives the number that you want to divide by. Also note that the corners have 4, the sides 6, and the middle 9:
D = ones(size(matrix1))*6;
D(2:end-1,2:end-1) = 9;
D([1,end],[1,end]) = 4;
out = matrix2.*conv2(matrix1,ones(3,3),'same')./D;
Or if you have the image toolbox you could just use blockproc:

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

태그

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by