Дисперсия и среднее значение изображения - PullRequest
5 голосов
/ 30 марта 2012

Я вычисляю среднее значение и дисперсию моего исходного изображения и изображения стего, чтобы сравнить их Я использую изображение BMP в градациях серого для comaprison

image=imread("image name")
M = mean(image(:))
V = var((image(:)))

Является ли это правильным способом вычисления среднего / переменного в MATLAB? Моя дисперсия становится больше, чем значит ...

Любая помощь приветствуется ..

Ответы [ 2 ]

8 голосов
/ 30 марта 2012

Это действительно правильный способ расчета среднего значения и дисперсии по всем пикселям вашего изображения.

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

mean     = sum(x)/length(x)
variance = sum((x - mean(x)).^2)/(length(x) - 1);

Например, если вы генерируете шум из стандартного нормального распределения с randn(N,1), вы получите N выборок, а если вы вычислите среднее значение и дисперсию, вы получите приблизительно 0 и 1. Так что и здесь ваша дисперсия вполне может быть больше среднего.

Оба имеют совершенно различное значение: среднее дает вам представление , где ваши пиксели (т.е. они белые, черные, 50% серые, ...). Среднее значение даст вам представление о том, какой цвет пикселя выбрать для суммирования цвета всего изображения. Дисперсия дает вам представление о том, как значения пикселей распространяются : например, если ваше среднее значение пикселей составляет 50% серого, то большинство других пикселей также 50% серого (небольшая дисперсия) или у вас есть 50 черных пикселей и 50 белых пикселей (большая дисперсия)? Таким образом, вы также можете рассматривать это как способ получить представление о том, насколько хорошо среднее суммирует изображение (т. Е. С нулевой дисперсией, большая часть информации захватывается средним значением).

edit: Для среднеквадратичного значения (среднеквадратичного значения) сигнала просто сделайте то, что говорит определение . В большинстве случаев вы хотите удалить компонент DC (т.е. среднее значение) перед вычислением значения RMS.

edit 2: Что я забыл упомянуть, так это то, что не имеет смысла сравнивать численное значение дисперсии со средним с физической точки зрения. Среднее значение имеет то же измерение, что и ваши данные (в случае пикселей, подумайте об интенсивности), тогда как дисперсия имеет размерность ваших данных в квадрате (то есть интенсивность ^ 2). Стандартное отклонение (std в MATLAB), являющееся квадратным корнем дисперсии, с другой стороны, имеет то же измерение, что и данные, поэтому вы можете провести некоторые сравнения (это другой вопрос, следует ли делать такое сравнение) .

5 голосов
/ 30 марта 2012

Если вы работаете с изображением RGB (В x Ш x 3), вам необходимо рассчитать среднее значение и дисперсию отдельно для каждого канала.В этом случае средний пиксель также будет вектором с 3 значениями.

for ch = 1:3
   M(ch) = mean(reshape(img(:,:,ch),[],1));
   V(ch) = var(reshape(img(:,:,ch),[],1));
end

MATLAB имеет функцию image.Избегайте использования его в качестве переменной.

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