Matrix convolution only on some elements

조회 수: 7 (최근 30일)
KRISTIAN MARCON
KRISTIAN MARCON 2022년 9월 5일
댓글: KRISTIAN MARCON 2022년 9월 6일
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

채택된 답변

Image Analyst
Image Analyst 2022년 9월 5일
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

추가 답변 (0개)

카테고리

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

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by