can I find NPCR value for two images of different dimensions using matlab code?
    5 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Veera Kalyani S
 am 29 Dez. 2016
  
    
    
    
    
    Kommentiert: Veera Kalyani S
 am 29 Dez. 2016
            I would like to find NPCR value of chaotic map using matlab code. Whether it is possible to find the npcr value if the input images are different dimensions?
I used this code..
 function results = NPCR_and_UACI( img_a, img_b, need_display, largest_allowed_val )
    %%1. input_check 
    [ height_a, width_a, depth_a ] = size( img_a );
    [ height_b, width_b, depth_b ] = size( img_b );
    if ( ( height_a ~= height_b ) ...
      || (  width_a ~=  width_b ) ...
      || (  depth_a ~=  depth_b ) )
        error( 'input images have to be of same dimensions' );
    end
    class_a = class( img_a );
    class_b = class( img_b );
    if ( ~strcmp( class_a, class_b) )
        error( 'input images have to be of same data type'); 
    end
    %%2. measure preparations
    if ( ~exist( 'largest_allowed_val', 'var') )
        switch  class_a 
            case 'uint16'
                largest_allowed_val = 65535;
            case 'uint8'
                largest_allowed_val = 255;
            case 'logical'
                largest_allowed_val = 2;
            otherwise
                largest_allowed_val = max ( max( img_a(:), img_b(:) ) );
        end
    end
    if ( ~exist( 'need_display', 'var' ) ) 
        need_display = 1;
    end
    img_a = double( img_a );
    img_b = double( img_b );
    num_of_pix = numel( img_a );
    %%3. NCPR score and p_value
    results.npcr_score = sum( double( img_a(:) ~= img_b(:) ) ) / num_of_pix;
    npcr_mu  = ( largest_allowed_val ) / ( largest_allowed_val+ 1 );
    npcr_var =  ( ( largest_allowed_val) / ( largest_allowed_val+ 1 )^2 ) / num_of_pix;
    results.npcr_pVal = normcdf( results.npcr_score, npcr_mu, sqrt( npcr_var ) );
    results.npcr_dist = [ npcr_mu, npcr_var ];
    %%4. UACI score and p_value 
    results.uaci_score = sum( abs( img_a(:) - img_b(:) ) ) / num_of_pix / largest_allowed_val; 
    uaci_mu  = ( largest_allowed_val+2 ) / ( largest_allowed_val*3+3 );
    uaci_var = ( ( largest_allowed_val+2 ) * ( largest_allowed_val^2 + 2*largest_allowed_val+ 3 ) /18 / ( largest_allowed_val+ 1 )^2 / largest_allowed_val) / num_of_pix;
    p_vals = normcdf( results.uaci_score, uaci_mu, sqrt( uaci_var ) );
    p_vals( p_vals > 0.5 ) = 1 - p_vals( p_vals > 0.5 );
    results.uaci_pVal = 2 * p_vals;
    results.uaci_dist = [ uaci_mu, uaci_var ];
    %%5. optional output
    if ( need_display ) 
       format long;
       display( results ); 
    end
    end
but this code ensures to give input images of same dimensions.
Any other alternate way is there to compute Net pixel change rate using matlab?
0 Kommentare
Akzeptierte Antwort
  Walter Roberson
      
      
 am 29 Dez. 2016
        "Whether it is possible to find the npcr value if the input images are different dimensions?"
NO.
Well, I suppose you could find the NPCR of the overlapping portion of the images.
3 Kommentare
  Walter Roberson
      
      
 am 29 Dez. 2016
				You can use that code.
Chaotic maps typically require square images, so you might have padded your original image before putting it through the transform. If so then compare the padded image against the encrypted image.
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

