How to find median value of a columns of a matrix ?

6 vues (au cours des 30 derniers jours)
majid
majid le 5 Sep 2021
Commenté : majid le 5 Sep 2021
I have a zero-padded 8*8 matrix, and I want to find the median value of 3*3 block and then change the value of the middle element to this median value, then go to next block and do the same. how can I do this?
Here is my code:
A=[44 25 22 55 21 11;35 43 2 23 45 66;12 22 19 12 76 88; 21 23 43 12 65 75;...
10 86 56 55 23 97;23 75 88 5 55 71];
A_padded = padarray(A, [1 1]); % my 'zero-padding'
Thanks in advance for the help!

Réponse acceptée

Walter Roberson
Walter Roberson le 5 Sep 2021
Modifié(e) : Walter Roberson le 5 Sep 2021
A=[44 25 22 55 21 11;35 43 2 23 45 66;12 22 19 12 76 88; 21 23 43 12 65 75;...
10 86 56 55 23 97;23 75 88 5 55 71];
A_padded = padarray(A, [1 1]); % my 'zero-padding'
A_padded
A_padded = 8×8
0 0 0 0 0 0 0 0 0 44 25 22 55 21 11 0 0 35 43 2 23 45 66 0 0 12 22 19 12 76 88 0 0 21 23 43 12 65 75 0 0 10 86 56 55 23 97 0 0 23 75 88 5 55 71 0 0 0 0 0 0 0 0 0
simpliest_way = medfilt2(A_padded)
simpliest_way = 8×8
0 0 0 0 0 0 0 0 0 0 22 22 21 21 0 0 0 22 22 22 22 45 21 0 0 21 22 22 23 65 65 0 0 12 22 23 43 65 65 0 0 21 43 55 55 55 55 0 0 0 23 55 23 23 0 0 0 0 0 0 0 0 0 0
more_complicated = blockproc(A_padded, [1 1], @(B) median(B.data(:)), 'BorderSize', [1 1], 'TrimBorder', false)
more_complicated = 8×8
0 0 0 0 0 0 0 0 0 0 22 22 21 21 0 0 0 22 22 22 22 45 21 0 0 21 22 22 23 65 65 0 0 12 22 23 43 65 65 0 0 21 43 55 55 55 55 0 0 0 23 55 23 23 0 0 0 0 0 0 0 0 0 0
  5 commentaires
Walter Roberson
Walter Roberson le 5 Sep 2021
Modifié(e) : Walter Roberson le 5 Sep 2021
What size of output are you expecting?
For example,
A B C D
E F G H
I J K L
First block would be [A B C] and you said you want to replace the middle with the median, which would give you [A M1 C] where M1 is a median. Then you slide over to [B C D] and you want to replace the middle with the median, which would give you [B M2 D] . Now you want to put those two together on output... and you would want the first output row to look like
[A M1 C B M2 D]
??? So if there were N columns of input, then you would want the output to have (N-2)*3 columns ??
Or do you want to output only the medians, so the output for the first row would be [M1 M2] ?
If you want to output only the medians, and it is for the 1 x 3 sliding, then the code is what I posted earlier,
more_complicated = blockproc(A_padded, [1 1], @(B) median(B.data(:)), 'BorderSize', [0 1], 'TrimBorder', false)
majid
majid le 5 Sep 2021
I need the seond case.
fo matrix
A B C D
E F G H
I J K L
we first derive median of middle column (variable X1)and middle row (variable X2)
A B C
E F G
I J K
Then we go 1 element forward now we want to derive this matrix median
B C D
F G H
J K L
and so on!
finally we derive:
median of each rows : X1=[M1 M2 M3 ... Mn]
median of each column: X2=[N1 N2 N3 ... Nn]
do I explain clear?

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by