--- bakoguz <> wrote:|
> I have a problem of for loops.
> I saw the messages about them but it did not help
> I want to filter my matrix(actually an image) by a
> and I want to convolve(2D) my filter with my image.
> If I use
> for loops, I need two of them, but the execution is
> too slow.
> Can you suggest something about it ?
> Thank you...
> burak > Example Problem :
> % 3x3 mean filter
> mask = [ 1/9 1/9 1/9 ; 1/9 1/9 1/9 ; 1/9 1/9 1/9] ;
> [row_mask, col_mask] = size(mask) ;
> [row_im , col_im , rgb_ ] = size(image) ;
> image = im2double(image,'indexed');
> result_image = image ;
> for k = 1 : (row_im + 1 - row_mask),
> for m = 1 : (col_im + 1 - col_mask),
> temp_matrix = times(part_of_im , mask) ;
> sum_temp = round( sum(sum(temp_matrix)) ) ;
> temp_index_row = k-1 +(row_mask+1)/2 ;
> temp_index_col = m-1 +(col_mask+1)/2 ;
> result_image(temp_index_row ,
> temp_index_col) = sum_temp ;
> end; > Hi,
If I followed correctly your example you just want to
put the average of 9 surrounding pixels at each pixel.
The following transformation matrix does it for square
B=diag(ones(N-1),1); % N is the height (and width)
T=eye(N)+B+B'; % Transformation matrix
Then apply it:
Result=T*A*T/9; % A is the original matrix
You can try to generalize it to non-square matrices or
to divide your matrix to square blocks.
BSTEX - Equation viewer for Matlab