conv2 'valid' implementation
26 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Alla
el 2 de Nov. de 2018
Comentada: Savannah Quinn
el 13 de Sept. de 2020
I need to implement the conv2 function for a the HDL coder since it's not supported, I believe that I have the main function down, what I'm struggling with is the implementation of conv2 'valid' which is described in the documentation with — Returns only parts of the convolution that are computed without zero-padded edges-
The code for conv2 is the one I'm sharing, any help would be appreciated.
function B = convolve(A, k)
[r, c] = size(A);
[m, n] = size(k);
h = rot90(k, 2);
center = floor((size(h)+1)/2);
left = center(2) - 1;
right = n - center(2);
top = center(1) - 1;
bottom = m - center(1);
Rep = zeros(r + top + bottom, c + left + right);
for x = 1 + top : r + top
for y = 1 + left : c + left
Rep(x,y) = A(x - top, y - left);
end
end
B = zeros(r , c);
for x = 1 : r
for y = 1 : c
for i = 1 : m
for j = 1 : n
q = x - 1;
w = y -1;
B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
end
end
end
end
2 comentarios
Savannah Quinn
el 13 de Sept. de 2020
Hello, I am trying to use this code to implement various image filters however I keep getting the an index out of bounds error due to h(i,j). Any ideas?
Respuesta aceptada
Lin Bai
el 9 de En. de 2019
as mentioned by Bharath, it is more efficient to use Simulink model instead of the MATLAB code to implement the conv2d function. Here I post the link of the Simulink model, which uses the image filer from Vision HDL toolbox to implement conv2 function.
In this model, image filter uses 'same' instead since it is more widely used in deep learning.
7 comentarios
Lin Bai
el 18 de En. de 2019
Here I attached the model using pixel control bus to resize the image, remove the last column and remove the last row separately. please check. alough the funtions mentioned above are achieved, the total time(clock cycles) for one image trnasmit is not changed at all.
You could also check this example "Image Pyramid for FPGA" in Matlab Help. this really achieves the resize function.
Más respuestas (2)
Bharath Venkataraman
el 2 de Nov. de 2018
Editada: Bharath Venkataraman
el 2 de Nov. de 2018
If you are looking for conv2 for image filtering, you can use the ImageFilter block and System object in Vision HDL Toolbox.
1 comentario
Bharath Venkataraman
el 20 de Nov. de 2018
2 comentarios
Bharath Venkataraman
el 29 de Nov. de 2018
conv2 with 'valid' returns a smaller image (without padding), so please make sure you are only comparing the central part of the image.
You may find it closer to matching if you use 'same' instead of 'valid'.
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!