can I find NPCR value for two images of different dimensions using matlab code?
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Walter Roberson
2016-12-29
"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 个评论
Walter Roberson
2016-12-29
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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!