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 14:06:08 浏览: 42
这段代码实现了一个图像的对比度计算,具体实现过程如下:
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等,需要事先了解相关函数的使用方法。
相关问题
// 编辑数据 function editData(title, type) { const data = questionsData.find(q => q.title === title && q.type === type); title.value = data.title; type.value = data.type; options[0].value = data.options.A; options[1].value = data.options.B; options[2].value = data.options.C; options[3].value = data.options.D; answer.value = data.answer; score.value = data.score; }当我编辑时为什么页面不会实时更新 且localstorage中也没有更新
这可能是因为你只是在编辑数据时更新了变量,但没有将更新后的数据保存回 localStorage 中。你需要在编辑数据之后,将更新后的数据重新写入 localStorage 中,以便下次打开页面时可以正确地加载更新后的数据。你可以使用类似以下的代码将更新后的数据保存回 localStorage 中:
```
function editData(title, type) {
const data = questionsData.find(q => q.title === title && q.type === type);
title.value = data.title;
type.value = data.type;
options[0].value = data.options.A;
options[1].value = data.options.B;
options[2].value = data.options.C;
options[3].value = data.options.D;
answer.value = data.answer;
score.value = data.score;
// 将更新后的数据保存回 localStorage 中
localStorage.setItem('questionsData', JSON.stringify(questionsData));
}
```
这样,当你编辑数据时,localStorage 中的数据也会被更新,下次打开页面时就可以正确地加载更新后的数据了。
async function confirm() { isShow.value = false; // params.value.pageSize = 7 let i = menu.value.find((v) => v.isActive === true).id - 1; if (i === 0) { params.value.houseType = tagsList.value.find( (v) => v.isActive === true )?.value; } else if (i === 1) { params.value.orientation = tagsList.value.find( (v) => v.isActive === true )?.value; } else if (i === 2) { params.value.rentStr = tagsList.value.find( (v) => v.isActive === true )?.value; } else if (i === 3) { let arr = []; tagsList.value?.forEach((v) => { if (v.isActive === true) { arr.push(v.value * 1); } }); if (arr.length > 0) { params.value.houseLabels = arr.join(","); } } search(); }优化
可以将这段代码优化为:
```
isShow.value = false;
// params.value.pageSize = 7
const i = menu.value.findIndex(v => v.isActive) - 1;
if (i === 0) {
params.value.houseType = tagsList.value.find(v => v.isActive)?.value;
} else if (i === 1) {
params.value.orientation = tagsList.value.find(v => v.isActive)?.value;
} else if (i === 2) {
params.value.rentStr = tagsList.value.find(v => v.isActive)?.value;
} else if (i === 3) {
const arr = tagsList.value?.filter(v => v.isActive)?.map(v => v.value * 1);
if (arr?.length) {
params.value.houseLabels = arr.join(",");
}
}
search();
```
这样可以将代码变得更加简洁和易读,同时也可以避免使用可选链操作符时的一些潜在问题。