- 'same' — Return the central part of the convolution, which is the same size as A.
What precisely is conv2(A,B,'same')?
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Anonymous
el 19 de Nov. de 2018
Comentada: Nunzio Russo
el 26 de En. de 2021
Hi All,
I am aware of the following:
- Given two matrices A and B, the matrix
is a submatrix of their convolution
, and I know the definition of
.
and A have the same size.
My question is:
If A is a
matrix and B is
, then what are the values of i and j such that
? That is, where does
start inside the matrix
?
matrix and B is
? That is, where does
start inside the matrix
? Many thanks
4 comentarios
Richard Lockwood
el 5 de Nov. de 2020
I believe it is the middle half, from 1/4 to 3/4 of the total interval
Image Analyst
el 6 de Nov. de 2020
RIchard, no, not correct. It's not the middle 50%.
'Same' is the part of the output signal where the moving kernel's central element overlaps some part of the signal. So it includes signal where the central element of the moving kernel overlaps an element of the input signal and includes locations where the kernel "falls off" the end of the signal as long as the central element is still over the input signal.
'Full" is the entire output signal, even when the kernel is at the end and only a single element of the kernel overlaps the signal.
'Valid' is where the kernel fully overlaps the signal. So it would not include the ends of the signal where some parts of the moving kernel "fall off" the end of the input signal (they do not overlap).
Respuesta aceptada
Bruno Luong
el 19 de Nov. de 2018
Editada: Bruno Luong
el 25 de En. de 2021
For vectors A and B
C = conv(A,B,'same')
is equivalent to
Cfull = conv(A,B,'full')
C = Cfull(floor(length(B)/2) + (1:length(A)))
For 2D or ND, repeat the above indexing for each dimension d, using size(.,d) instead of length(.).
5 comentarios
Bruno Luong
el 25 de En. de 2021
Editada: Bruno Luong
el 25 de En. de 2021
This is ta reply to
Nunzio Russo 's deleted question
"Hello Bruno can you pls explain it again for 2dimensional arrays ? I don't get it right now. I don't know what you mean with variable d ? Perhaps you can explain it again and write it down as a formula. Thank you ! "
In 2D
C = conv2(A,B,'same')
is equivalent to
Cfull = conv2(A,B,'full')
C = Cfull(floor(size(B,1)/2) + (1:size(A,1)), ...
floor(size(B,2)/2) + (1:size(A,2)))
Fot nd case
C = convn(A,B,'same') % is eqivalent to
Cfull = convn(A,B,'full');
idx = arrayfun(@(B,A) floor(B/2)+(1:A), size(B), size(A), 'unif', 0); % NOTE: traling singleton needs to be handled
C = Cfull(idx{:})
Nunzio Russo
el 26 de En. de 2021
Bruno Thank you again !
I deleted my question yesterday after coming to the same conclusion. :)
Más respuestas (1)
Image Analyst
el 19 de Nov. de 2018
Sounds like homework. This is very easy. Just make up arrays on paper, like cut out gridded paper or draw something. Then just physically move the paper along and look where you are. Really, it's trivial.
0 comentarios
Ver también
Categorías
Más información sobre Annotations en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!