MATLAB: Расчет контраста

Я пытаюсь рассчитать контраст изображения 'tire.tif' в Matlab, используя эту формулу Contrast формула Я сделал эту маленькую программу в Matlab двумя способами. Проблема в том, что я не получаю тот же результат. Может кто-нибудь проверить мой код и сказать мне, что я сделал неправильно.

[M,N]=size(I);
Lumi=1/(M*N)*sum(I(:)); % which gives 53.66

Cont_method1=sqrt(1/(N*M)*sum(I(:)-Lumi)^2); % gives 5.478+03
Cont_method2=sqrt(1/prod(size(I))*sum(power((I(:)-Lumi),2))); % gives 9.0292

person Smash Ribas    schedule 18.05.2018    source источник
comment
В методе 1 у вас есть sum(err)*sum(err), в методе 2 у вас есть sum(err*err).   -  person Phil Goddard    schedule 18.05.2018


Ответы (1)


Ваш первый метод,

Cont_method1 = sqrt( 
                     1/(N*M) * sum( 
                                    I(:)-Lumi 
                                  )^2
                   );

вычисляет сумму I(:)-Lumi, затем возводит сумму в квадрат. Уравнение, которое вы связываете, принимает сумму квадратов:

Cont_method1 = sqrt( 
                     1/(N*M) * sum( 
                                    ( I(:)-Lumi )^2 
                                  )
                   );

Это эквивалентно вашему второму методу:

Cont_method2 = sqrt(
                     1/prod(size(I)) * sum(
                                            power( ( I(:)-Lumi ), 2 )
                                          )
                   );

Обратите внимание, что N*M и prod(size(I)) — это одно и то же, и оба эквивалентны более эффективному numel(I). И обратите внимание, что деление суммы на количество элементов аналогично вычислению среднего значения с использованием mean. Таким образом, вы можете упростить:

Cont_method3 = sqrt( mean( ( I(:)-Lumi )^2 ));

Но обратите внимание, что все, что вы здесь делаете, это вычисляет масштабированную норму:

Cont_method4 = norm(I(:)-Lumi) / sqrt(numel(I));
person Cris Luengo    schedule 18.05.2018