Рассчитать медианное изображение в Matlab - PullRequest
3 голосов
/ 18 февраля 2012

Я новичок в Matlab, так что прости меня, если я прошу очевидного здесь: у меня есть коллекция цветных фотографических изображений (все те же размеры). Я хочу вычислить медиану значения цвета для каждого пикселя.

Я знаю, что в matlab есть медианный фильтр, но, насколько я знаю, он не делает именно то, что я хочу. Потому что я хочу рассчитать медианное значение для всей коллекции изображений для каждого отдельного пикселя.

Так, например, если у меня есть три изображения, я хочу, чтобы matlab вычислял (для каждого пикселя), какое значение цвета из этих трех изображений является медианным значением. Как мне поступить так, кто-нибудь знает?


Редактировать: Исходя из того, что я могу придумать, мне пришлось бы загрузить все изображения в одну матрицу. Матрица должна иметь 4 измерения (высоту, ширину, RGB, изображения), и для каждого пикселя и каждого цвета найти медиану в 4-м измерении (между изображениями). Это правильно (и возможно)? И как я могу это сделать?

Ответы [ 2 ]

6 голосов
/ 18 февраля 2012

Ваша интуиция верна. Если у вас есть изображения image_1, image_2, image_3, например, вы можете назначить их 4-мерной матрице:

X(:,:,:,1) = image_1;
X(:,:,:,2) = image_2;
X(:,:,:,3) = image_3;

Тогда используйте:

Y=median(X,4);

Чтобы получить медиану.

2 голосов
/ 18 февраля 2012

Расширение моих комментариев до полного ответа;

@ ответ prototoast элегантен, но поскольку медианы для значений R, G и B каждого пикселя рассчитываются отдельно, выходное изображение будет выглядеть очень странно.

Чтобы получить четко определенную медиану, которая имеет визуальный смысл, проще всего сделать приведение изображений к черно-белым, прежде чем пытаться взять медиану.

rgb2gray() из панели инструментов Обработка изображений будет делать это таким образом, чтобы сохранить яркость каждого пикселя при отбрасывании оттенка и насыщенности.

РЕДАКТИРОВАТЬ:

Если вы хотите определить «медиану RGB» как «среднее значение в декартовых координатах», это достаточно просто сделать для трех изображений.

Рассмотрим один пиксель с тремя возможными вариантами выбора для медианыцвет, C1=(r1,g1,b1), C2=(r2,g2,b2), C3=(r3,g3,b3).Обычно они образуют треугольник в трехмерном пространстве.

Возьмите пифагорейское расстояние между тремя цветами: D1_2=abs(C2-C1), D2_3=abs(C3-C2), D1_3=abs(C3-C1).

Выберите "медиану", чтобы бытьцвет, который имеет наименьшее расстояние до двух других.Определение D1=D1_2+D1_3 и т. Д. И взятие min(D1,D2,D3) должно работать, благодаря Треугольному неравенству .Обратите внимание на вырожденные случаи: равносторонний треугольник (равноудаленный C1, C2, C3), прямая (линейная линия C1, C2, C3) или точка (C1 = C2 = C3).

Обратите внимание, что этот простой способразмышления о трехмерной медиане трудно распространить на более чем три изображения, потому что «медиану» набора из четырех или более трехмерных точек определить немного сложнее.

Edit 2

Для определения «медианы» из N точек как центра самой маленькой сферы, которая окружает их в трехмерном пространстве, вы можете попробовать:

  1. Найти две точки N1 и N2в {N}, которые находятся дальше друг от друга.Расстояние между N1 и N2 - это диаметр самой маленькой сферы, которая охватывает все точки.(Доказательство: любой меньший размер и сфера не смогут одновременно охватить N1 и N2.)
  2. Медиана тогда находится посередине между N1 и N2: M = (N1+N2)/2.

Редактировать 3 : Вышеуказанное работает, только если три точки не равноудалены.Может быть, вам нужно спросить math.stackexchange.com?

Редактировать 4 : Википедия снова появилась! Наименьшая проблема окружности , Ограничивающая сфера .

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