how can I use my function on 3*3 blocks?
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
jack nn
il 9 Apr 2015
Commentato: Mohammad Abouali
il 10 Apr 2015
hi I have a matrix ,I wanna use a function on 3*3 blocks. my function is: if in a block we watch just a one this block should return 1 but if all 9 elements of this block is zero this function should return 0 how can I do this in matlab?
...all the elements of this matrix is zero and one.
1 Commento
Image Analyst
il 9 Apr 2015
Give examples of the 3x3 blocks that return 1 and 0. I especially don't understand the grammar of "if in a block we watch just a one this block should return 1". Exactly what returns a 1? Does this:
[.2 .3 .4
.3. .5 .6
.6 .7 .9]
Does this?
[0 0 1
0 0 0
0 0 0]
Risposta accettata
Mohammad Abouali
il 10 Apr 2015
Modificato: Mohammad Abouali
il 10 Apr 2015
inputData=zeros(10,10);
inputData(randi(100,[15,1]))=1
inputData =
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0
% this is what you are looking for
result=blockproc(inputData,[3,3],@(block) any(block.data(:)~=0))
result =
0 0 1 0
1 0 1 1
1 0 1 0
1 1 0 0
% and if you want both inputData and result matrix be the same size do this:
result=blockproc(inputData,[3,3],@(block) any(block.data(:)~=0)*ones(3,3))
result =
0 0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1 0 0 0
1 1 1 0 0 0 1 1 1 1 1 1
1 1 1 0 0 0 1 1 1 1 1 1
1 1 1 0 0 0 1 1 1 1 1 1
1 1 1 0 0 0 1 1 1 0 0 0
1 1 1 0 0 0 1 1 1 0 0 0
1 1 1 0 0 0 1 1 1 0 0 0
1 1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 1 0 0 0 0 0 0
2 Commenti
Più risposte (1)
Roger Stafford
il 10 Apr 2015
m = M(a:a+2,b:b+2); % This is your "block"
t = +any(m(:)~=0); % This is the returned value
0 Commenti
Vedere anche
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!