Matrix convolution only on some elements

7 views (last 30 days)
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

Accepted Answer

Image Analyst
Image Analyst on 5 Sep 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

More Answers (0)

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!