function [value] = CCFcontrast(A) T = 0.002; A = double(A); [m,n] = size(A); rb = 64; rc = 64; count = 1; blockrow = floor(m/rb); blockcol = floor(n/rc); l = blockrow*blockcol; for i=1:blockrow for j=1:blockcol row = rb*(i-1)+1:rb*i; col = rc*(j-1)+1:rc*j; A_temp = A(row,col); % check if block to be processed decision = get_edgeblocks_mod(A_temp,T); if (decision==1) contrast_JNB(count) = blkproc(A_temp,[rb rc],@get_contrast_block);%改为RMS计算方法 count = count + 1; end end end value = (sum(contrast_JNB))/l; % function im_out = get_edgeblocks_mod(im_in,T) im_in = double(im_in); [im_in_edge,th] = edge(im_in,'canny'); [m,n] = size(im_in_edge); L = m*n; im_edge_pixels = sum(sum(im_in_edge)); im_out = im_edge_pixels > (L*T) ; % function contrast_wy = get_contrast_block(A) [m,n] =size(A); contrast_wy =sqrt(sum(sum((A-mean2(A)).^2)/(n*m)));
时间: 2023-06-15 11:06:08 浏览: 95
这段代码实现了一个图像的对比度计算,具体实现过程如下:
1. 将输入的图像A转为double类型,获取图像的行列数m和n。
2. 定义rb和rc为64,即每个块的大小为64x64。
3. 计算图像分成多少个块,blockrow为行数除以rb的结果,blockcol为列数除以rc的结果,l为块的总数。
4. 对每个块进行处理,首先判断是否需要处理,判断条件为这个块的边缘像素数量是否大于总像素数量的T(T为0.002)。若需要处理,则对该块计算对比度,采用的计算方法为RMS(均方根)计算方法,计算公式为sqrt(sum(sum((A-mean2(A)).^2)/(n*m)))。
5. 对所有块的对比度值求平均数,即为该图像的对比度。
需要注意的是,这里使用了Matlab中的一些函数,如blkproc、edge等,需要事先了解相关函数的使用方法。
阅读全文