2015-02-11 2 views
0

Мой вопрос немного более концептуальен, чем что-либо. Я представляю пространственную карту (например, карту мегаполиса) в полярной системе координат. Я записал данные от людей в пригородном районе 10x10, где они хотели бы жить в этой столичной области, заданной (r,theta) - r расстояние от центра, theta угол вокруг оси x, поэтому я использую полярную координату и использовать HSV для цветового кода, сохраняя V=1=constant. Получив цвет HSV каждого дома, я преобразовал эту матрицу HSV 10x10x3 в RGB и использовал изображение(), чтобы отобразить следующий график.Средний размер пикселей в цвете HSV vs RGB

Fig1: [10x10 сетка, представляющая окрестности. Цвета представляют, где эти семьи хотят жить в столичном регионе. Легенда показывает мегаполис в полярных координатах, цветовое пространство HSV, где V = 1 всегда.]

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

Img2=imresize(Img,1000,'bilinear','colormap','original'); 

Это увеличивает размер 10x10x3 RGB матрица для 10000x10000x3 матрицы RGB при использовании билинейной интерполяции между пикселами, таким образом, своего рода сглаживания изображения, показанного здесь:

Рис. 2: [Большая сглаженная матрица с использованием билинейного интерполирования между пикселями]

My questi on is: Действительно ли это использовать метод интерполяции в пространстве RGB, если мои основные интересы лежат в пространстве HSV, то есть в полярной координатной столичной области? Другими словами, когда эта функция принимает средний цвет многих пикселей в RGB, будет ли она представлять правильный радиус и угол в столичной области?

Спасибо вам большое раньше. Я приношу свои извинения за долговременное создание до потенциально простого вопроса.

ответ

1

V определяется как max (R, G, B).

Если вы интерполировать от RGB(255,0,0) до RGB(0,0,255), то на полпути вы будете в конечном итоге с RGB(128,0,128).

Вы видите макс затем 128. Таким образом, вы не можете использовать rgb интерполяции, если вы не увеличите V обратно к 1 (или 255, если вы используете 8 бит)

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

Смотрите здесь для получения дополнительной информации: https://stackoverflow.com/a/2594030/461499

+1

Minor примечания: MATLAB масштабирует компоненту HSV на '[0,1]' для всех каналов. С технической точки зрения, max стал бы '0,5'. Просто придираюсь. Ваш вопрос по-прежнему очень важен, поэтому +1. – rayryeng

+0

Также полезная ссылка тоже. Я всегда задавался вопросом, как интерполировать в HSV! – rayryeng

+0

Несколько последующих вопросов, предполагая, что интерполяция будет по-прежнему использоваться: 1) Если я использую интерполяцию rgb, то снова увеличивайте V до 1, это было бы верно? 2) В вашей ссылке в основном говорится, что средний оттенок между двумя пикселями - это оттенок, который находится на самом коротком круговом расстоянии между ними. Поскольку это двумерная интерполяция, мне приходится усреднять много значений оттенков. Я бы просто нашел оттенок, который находится на самом коротком круговом расстоянии между самым низким и высоким оттенком? – Lyndon

Смежные вопросы