Matrix convolution only on some elements

7 visualizzazioni (ultimi 30 giorni)
Hi, I'm a junior with matlab experience. I tried to search whatever like my problem on internet without find any answer. I have to do a convolution on a matrix A using conv2 but only if the central element (overlaped on the mask) is 1
For example
A=[ 1 0 1 0 ; 0 1 0 0 ; 1 0 0 0 ; 0 1 0 0]
F=[1 1 1; 1 0 1; 1 1 1]
The convolution conv2(A,F,'same') have to been made only if the central element is 1 (like 1', 3', 5',... elements) skipping the convolution if is 0. Obvious i can accept any other functions like conv2 to do the convolution. Thanks if everybody can help me

Risposta accettata

Image Analyst
Image Analyst il 5 Set 2022
Try this:
A=[ 1 0 1 0 ; 0 1 0 0 ; 1 0 0 0 ; 0 1 0 0]
A = 4×4
1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0
F=[1 1 1; 1 0 1; 1 1 1]
F = 3×3
1 1 1 1 0 1 1 1 1
% Do the complete convolution.
AF = conv2(A, F, 'same')
AF = 4×4
1 3 1 1 3 3 2 1 2 3 2 0 2 1 1 0
% Since we want the convolution ONLY where A == 1,
% we can replace ONLY those places with AF
Aout = A; % Initialize
mask = A == 1
mask = 4×4 logical array
1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0
Aout(mask) = AF(mask) % Replace with AF but only where A is 1.
Aout = 4×4
1 0 1 0 0 3 0 0 2 0 0 0 0 1 0 0

Più risposte (0)

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by