使用更清晰的解释进行编辑
我正在尝试在处理数据集后对数据集进行规范化,但是处理后的最小值,最大值,范围会发生变化(例如,一个图像在范围[0.38,5.26]
之间,另一个图像在[-0.44, 3.65]
之间)并使用常规规范化方法在[0,1]
之间对它们进行规范化,但这会导致图像之间的不一致。
imagesPath = '/home/berkanhoke/Datasets/Freiburg/Org/Night/';
outFolderPath = '/home/berkanhoke/Datasets/Freiburg/Maddern/Night';
imageSet = dir(strcat(imagesPath,'*.jpeg'));
imageCount = length(imageSet);
for i = 1:imageCount
fileName = imageSet(i).name;
filePath = strcat(imagesPath,fileName);
img = double(imread(filePath));
I_old = maddern(img,0.3975);
I_new = (I_old - min(I_old(:)))/(max(I_old(:)) - min(I_old(:)));
writePath = strcat(outFolderPath,fileName);
imwrite(I_new,writePath,'jpeg');
end
我用于处理的功能如下:
function [ ii_image ] = maddern( image, alpha )
ii_image = 0.5 + log(image(:,:,2)+1)...
- alpha * log(image(:,:,3)+1)...
- (1-alpha) * log(image(:,:,1)+1);
基于论文:http://www.robots.ox.ac.uk/~mobile/Papers/2014ICRA_maddern.pdf
我尝试对整个数据集的最小值/最大值进行归一化,但它没有用,我得到了奇怪的结果。如何通过在处理后保持图像一致来规范化图像?
答案 0 :(得分:0)
问题在于,当您在MATLAB中执行min / max函数时,它只在一维中执行。因此,如果您有256x256图像,当您执行min(图像)时,您将获得1x256矢量。当你除以这个时,你正在做(256x256)/(1x256)= 256x1
要解决此问题,您需要执行min(min(image))