Tuesday, 15 March 2011

Image sampling matlab

To perform sampling of an image in matlab

 
 
Program:
%% matlab coding for image sampling

 
if (nargin==0)
    hFig    = figure( 'visible','off' );
    hImage  = image;
    Child   = get( hImage,'cdata' );
    close( hFig );
            out     = updownsample( Child,300,300,0,1 );
            figure;
            colormap gray;
            subplot( 1,2,1 );
            imagesc( Child );
            subplot( 1,2,2 );
            imagesc( out );
    return
elseif (nargin<5)
    error( 'UpDownSample - insufficient input parameters' );
end
% get input image size, and calculate the gain
[in_y_sz,in_x_sz] = size( in_m );
gain_x = out_x_sz/in_x_sz;
gain_y = out_y_sz/in_y_sz;
% check if up/down sampling is needed at all
if (gain_x == 1) & (gain_y==1)
    % same gain -> do not change sampling rate
    if is_fourier_flag
        switch is_real_flag
            case 0, out_m = ifft2( in_m );
            case 1, out_m = real( ifft2( in_m ) );
            case 2, out_m = abs( ifft2( in_m ) );
        end
    else
        out_m = in_m;
    end
else
    % upsample or downsample as needed
    % convert to fourier domain, if input is given in the space domain
    if ~is_fourier_flag
        in_m = fft2(in_m);
    end
      % if the input is even & output is odd-> use floor for all
    % if the output is even & input is odd -> use ceil for all
    % for downsampling -> the opposite
    if (~mod( in_x_sz,2 ) & (out_x_sz>in_x_sz)) | (mod( in_x_sz,2 ) & (out_x_sz<in_x_sz))
        x_output_space  = max(floor((out_x_sz-in_x_sz)/2),0) + [1:min(in_x_sz,out_x_sz)];
        x_input_space   = max(floor((in_x_sz-out_x_sz)/2),0) + [1:min(in_x_sz,out_x_sz)];
    else
        x_output_space  = max(ceil((out_x_sz-in_x_sz)/2),0) + [1:min(in_x_sz,out_x_sz)];
        x_input_space   = max(ceil((in_x_sz-out_x_sz)/2),0) + [1:min(in_x_sz,out_x_sz)];
    end
    if (~mod( in_y_sz,2 ) & (out_y_sz>in_y_sz)) | (mod( in_y_sz,2 ) & (out_y_sz<in_y_sz))
       y_output_space  = max(floor((out_y_sz-in_y_sz)/2),0) + [1:min(in_y_sz,out_y_sz)];
       y_input_space   = max(floor((in_y_sz-out_y_sz)/2),0) + [1:min(in_y_sz,out_y_sz)];
   else
       y_output_space  = max(ceil((out_y_sz-in_y_sz)/2),0) + [1:min(in_y_sz,out_y_sz)];
       y_input_space   = max(ceil((in_y_sz-out_y_sz)/2),0) + [1:min(in_y_sz,out_y_sz)];
   end
       % perform the up/down sampling
    padded_out_m    = zeros( out_y_sz,out_x_sz );
    in_m            = fftshift(in_m);
    padded_out_m( y_output_space,x_output_space ) = in_m(y_input_space,x_input_space);
    out_m           = (gain_x*gain_y)*ifft2(ifftshift(padded_out_m));  
          switch is_real_flag
        case 0, % do nothing
        case 1, out_m   = real( out_m );
        case 2, out_m   = abs( out_m );
    end
   
end

2 comments:

  1. I need the solution manual of the following books:

    1. Power system analysis by VK Mehta and Rohit Mehta
    2. High voltage Engineering by MS NAIDU
    Please send me the link or upload.

    Thanks in advance


    YUSUF
    ymdsalahu2@gmail.com

    ReplyDelete
  2. I need the solution manual of the following books:

    1. Power system analysis by VK Mehta and Rohit Mehta
    thanks
    zohaib
    zasif30@yahoo.com

    ReplyDelete

LinkWithin

Related Posts Plugin for WordPress, Blogger...