处理后图像数据集的标准化

时间:2017-06-11 22:59:40

标签: matlab image-processing

使用更清晰的解释进行编辑

我正在尝试在处理数据集后对数据集进行规范化,但是处理后的最小值,最大值,范围会发生变化(例如,一个图像在范围[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

我尝试对整个数据集的最小值/最大值进行归一化,但它没有用,我得到了奇怪的结果。如何通过在处理后保持图像一致来规范化图像?

1 个答案:

答案 0 :(得分:0)

问题在于,当您在MATLAB中执行min / max函数时,它只在一维中执行。因此,如果您有256x256图像,当您执行min(图像)时,您将获得1x256矢量。当你除以这个时,你正在做(256x256)/(1x256)= 256x1

要解决此问题,您需要执行min(min(image))