function f = convolution(fileinput,filemask) input = imread(fileinput); masko = imread(filemask); [rows cols] = size(input); [rowms colms] = size(masko); mask = zeros(rowms,colms); %flip the mask for r = 1:rowms for c = 1:colms mask(r,c) = masko(rowms-r+1,colms-c+1); end end %convolve mask with image using the equation from slides output = zeros(rows,cols); for r = 1:(rows-rowms) for c = 1:(cols-colms) for rm = 1:rowms for cm = 1:colms output(r,c) = output(r,c) + double(input(r+rm,c+cm))*double(mask(rm,cm)); end end end end % setting pixels out of range to 0, ie as 'wrong' for r = (rows-rowms):rows for c = 1:cols output(r,c) = 0; end end for r = 1:(rows-rowms) for c = (cols-colms):cols output(r,c) = 0; end end %contrast the output max = 0; min = output(1,1); for r = 1:rows for c = 1:cols if output(r,c) > max max = output(r,c); end if output(r,c) < min min = output(r,c); end end end ratio = double(max-min)/double(255); for r = 1:rows for c = 1:cols if output(r,c) ~= 0 tmp = output(r,c); output(r,c) = double(tmp-min)/double(ratio); output(r,c) = round (output(r,c)); end end end max min maxk=0; mink=output(1,1); for r = 1:rows for c = 1:cols if output(r,c) > maxk maxk = output(r,c); end if output(r,c) < mink mink = output(r,c); end end end f = output; maxk mink