Как рассчитать скорость изменения пикселей в MATLAB - PullRequest
3 голосов
/ 24 сентября 2010

Есть две формулы, которые мне трудно представить в MATLAB .Пусть есть два RGB-изображения, A и B, одинакового размера, с m, n, представляющими строки и столбец, и третьим измерением d = 3.Formula1 в основном вычисляет скорость изменения пикселей, если A - исходное изображение, а B - искаженная версия.Formula2 рассчитывает среднюю скорость изменения пикселей.

1.Formula1= { sum(C(m,n,d)) / (m * n)} * 100

  where `C(m,n) = 0`, if `A(m,n) = B(m,n)`
                `=1`, if `A(m,n) != B(m,n)`

Сумма по всем строкам и столбцам, включая третье измерение.

Я пробовал что-то вроде этого:

Formula1 = sum(sum(abs(double(A)-double(B))./(m*n), 1), 2);

Но это не даетлюбая ошибкаОднако это не правильный способ представить его, поскольку условия if не включены.Проблемная область состоит в том, как включить условие, проверяя, A == B или нет, и A != B.

2.Formula2 ={ 1/ (m*n)} * sum { norm (A - B) / 255} * 100 Опять же, здесь также будет суммирование по всем измерениям.Я не знаю, как сформировать норму матрицы.

  1. Formula3 is ={ 1/ (m*n)} * sum {(A - B) / 255} * 100 Я попробовал вот так

    C = double (сумма (AB, 3));r = изменить (100 * (C / 255) / (m * n), [1 3])

Но есть ошибка, утверждающая, что размерность должна быть одинаковой, а изменение формы не работает.

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

Для Formula1:

function r = Formula1(A,B)
[m,n,d] = size(A); %# A and B must have the same dimension
C = A ~= B; %# C has a 1 in every pixel that's different
r = double(sum(C(:)))/(m*n);
r = r/d; %# normalize by number of color planes

Оператор ~= проверяет неравенство. (:) векторизует матрицу, что позволяет нам вычислять сумму по всем измерениям.

Для Formula2:

function r = Formula2(A,B)
[m,n,d] = size(A);
C = double(sum(A-B, 3)); %# sum over the color planes
C = C/d; %# normalize by number of color planes
K = norm(C); %# or norm(C,1), norm(C,inf) etc.
r = 100*(K/255)/(m*n);

Здесь sum(A-B, 3) суммирует цветовые плоскости, оставляя двумерную матрицу с размерами исходного изображения. Существует несколько норм матрицы, ваш выбор доступен в документации для NORM .

0 голосов
/ 24 сентября 2010

(A ~= B) создаст логический массив, равный true, где элементы отличаются.Затем вы можете привести это значение, например, к double, чтобы оно равнялось 1, если элементы отличаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...