求大神帮忙C语言实现3*3图片的卷积
这是matlab 代码:
function out_array = conv_fun(raw_input,weight,bias,stride,pad)
size_input = size(raw_input);
size_w = size(weight);
size_b = size(bias);
if pad>0
input = zeros(size_input(1)+2*pad, size_input(2)+2*pad,size_input(3),'int64' );
input(pad+1:pad+size_input(1),pad+1:pad+size_input(2),:) = raw_input;
else
input = raw_input;
end
size_output(1)=(size_input(1)+2*pad-size_w(1))/stride+1;
size_output(2)=(size_input(2)+2*pad-size_w(2))/stride+1;
size_output(3)=size_w(4);
out_array = zeros(size_output(1),size_output(2),size_output(3),'int64' );
for n=1:size_output(3)
for y=1:size_output(2)
for x=1:size_output(1)
x_start = (x-1)*stride + 1;
x_end = x_start + size_w(1) -1 ;
y_start = (y-1)*stride + 1;
y_end = y_start + size_w(2) -1;
z_start = 1;
z_end = size_w(3);
window = input(x_start:x_end,y_start:y_end,z_start:z_end); % crop a 3D array as a sliding window (1:3,1:3,1:3)
filter = weight(:,:,:,n);
conv_mat = window.*filter;
sum_v = sum(sum(sum(conv_mat)));
sum_v = sum_v + bias(n);
if sum_v < 0
sum_v = 0;
end
out_array(x,y,n) = sum_v;
end % end for y=1:size_output(2)
end % end for x=1:size_output(1)
end % end for n=1:size_output(3)
%%
size_out_array = size(out_array);
disp(['[Input size:',num2str(size_input),']','[weight size:',num2str(size_w),']','[bias size:',num2str(size_b),']','[stride:',num2str(stride),']','[pad:',num2str(pad),']','[output size:',num2str(size_out_array),']']);
end %end for the function