Невозможно получить контраст изображения, как описано его формулой

#matlab #image-processing

#matlab #обработка изображений

Вопрос:

Я пытался получить контрастность изображения, используя формулу, но значение контрастности не превышает 255. А также всякий раз, когда я пытался выполнить какую-либо операцию с моей матрицей изображений, значения элементов также не превышали 255. Я попытался преобразовать матрицу изображения в double, но значения элементов изменились и не равны исходным значениям пикселей.

 clc;
clear all;
close all;
h = imread('C:UsersLAXMIDHARDesktopMy proj filesabc.jpg');
g = rgb2gray(h);
% f = im2double(g);
[M,N] = size(g);
% 
% for i=1:M
%     for j=1:N
%         f(i,j) = f(i,j).*((i-j).^2);
%     end
% end
% 
% s = sum(sum(f));

s = 0;
for i = 1:M
    for j=1:N
        s = s (g(i,j).*((i-j).^2));
    end
end

% s  is the contrast of image
 

s ожидается, что оно будет большим, но не более 255. Это формула контраста:

Формула контраста

Комментарии:

1. Откуда взялось это уравнение? Как это приравнивается к контрасту? Для меня это выглядит странно.

2. В любом случае, ваша проблема в том, что g есть uint8 , и, следовательно s uint8 , также есть. MATLAB выполняет сложение целых чисел с насыщением, что означает, что превышение 255 в операции приводит к 255 (а не переполнению, как в других языках). Сначала просто преобразуйте свое изображение в double : g = double(g) .

3. Сэр, в этой формуле i и j — координаты, а g (i, j) — значение пикселя изображения в i-м j-м местоположении. Опять же, согласно вашему предложению, я попытался преобразовать в double, но в том смысле, что значения пикселей полностью отличаются по сравнению с исходным значением серого пикселя.

4. Посмотрите на мое предложение еще раз. Если вы используете im2double , значения изменяются, но я предложил вам преобразовать с double помощью, что не изменит значения.

5. Спасибо, сэр, за ваше любезное предложение. Не могли бы вы помочь мне с формулой для нахождения среднего контраста изображения?