# 2D convolution in matlab

function    C = convolve_slow(A,B)
(file name is accordingly convolve_slow.m )
This routine performs convolution between an image A and a mask B.

Input:      A - a grayscale image (values in [0,255])
B - a grayscale image (values in [0,255]) serves as a mask in the convolution.
Output:     C - a grayscale image (values in [0,255]) - the output of the convolution.
C is the same size as A.

Method:  Convolve A with mask B using zero padding. Assume the origin of B is at
floor(size(B)/2)+1.
Do NOT use matlab convolution routines (conv,conv2,filter2 etc).
Make the routine as efficient as possible: Restrict usage of for loops which
are expensive (use matrix multiplications and matlab routines such as dot etc). <br>
To simplify and reduce ifs, you should pad the image with zeros before starting your convolution loop.
Do not assume the size of A nor B (B might actually be larger than A sometimes).


here is my solution for this exercise. please elaborate on any change you have done or suggesting since i'm new to matlab and image processing.

function [ C ] = convolve_slow( A,B )<br>
%This routine performs convolution between an image A and a mask B.
%
% Input:      A - a grayscale image (values in [0,255])
%             B - a grayscale image (values in [0,255]) serves as a mask in the convolution.
% Output:     C - a grayscale image (values in [0,255]) - the output of the    convolution.
%             C is the same size as A.
%
% Method:  Convolve A with mask B using zero padding. Assume the origin of B is at floor(size(B)/2)+1.

% init C to size A with zeros
C = zeros(size(A));

% make b xy-reflection and vector
vectB = reshape(flipdim(flipdim(B,1),2)' ,[] , 1);

% padding A with zeros

% Loop over A matrix:
for i = 1:size(A,1)
for j = 1:size(A,2)
startAi = i;
finishAi = i + size(B,1) - 1;
startAj = j;
finishAj = j + size(B,2) - 1;

paddedA(i :i_end,j:j_end)