conv2 'valid' implementation

조회 수: 25 (최근 30일)
Alla
Alla 2018년 11월 2일
댓글: Savannah Quinn 2020년 9월 13일
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
Juan Pereira
Juan Pereira 2019년 10월 7일
Useful, thank you.
Savannah Quinn
Savannah Quinn 2020년 9월 13일
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?

댓글을 달려면 로그인하십시오.

채택된 답변

Lin Bai
Lin Bai 2019년 1월 9일
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
Lin Bai
Lin Bai 2019년 1월 18일
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.
Alla
Alla 2019년 1월 21일
Tremendous thanks to you Lin Bai, you have been a great help. there are not may people here who can help with these things specefically so your input is immensly valuable.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Bharath Venkataraman
Bharath Venkataraman 2018년 11월 2일
편집: Bharath Venkataraman 2018년 11월 2일
If you are looking for conv2 for image filtering, you can use the ImageFilter block and System object in Vision HDL Toolbox.
The Image Processing Toolbox has an example that shows how to do this .
  댓글 수: 1
Alla
Alla 2018년 11월 20일
편집: Alla 2018년 11월 20일
Bharath Venkataraman Thank you for your answer, I'm working with matlab code and not simulink, and I plan on using conv2 for operations in a convolutional neural netowrk.

댓글을 달려면 로그인하십시오.


Bharath Venkataraman
Bharath Venkataraman 2018년 11월 20일
You can use the MATLAB workflow in the example for image filtering.
  댓글 수: 2
Alla
Alla 2018년 11월 29일
I have tried using the Imagefilter block and code on a pixel stream of my input while using my own coefficients, I compared the outputs with conv2(in, filter, 'valid') and they're different. The source code for the filt2d function is understandbly inaccessible so I can't modify it to fit my requirements.
Bharath Venkataraman
Bharath Venkataraman 2018년 11월 29일
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'.

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by