какие значения изображения следует использовать для создания вейвлета Хаара?

В настоящее время у меня есть программа Java, которая будет получать значения rgb для каждого пикселя изображения. У меня также есть метод расчета вейвлета Хаара на двумерной матрице значений. Однако я не знаю, какие значения я должен дать моему методу, вычисляющему вейвлет Хаара. Должен ли я усреднять значение каждого пикселя rgb и вычислять на нем вейвлет Хаара? или, может быть, просто используйте 1 из r, g, b. Я пытаюсь создать уникальный отпечаток пальца для изображения. Я где-то читал, что это хороший метод, так как я могу взять скалярное произведение двух вейвлетов, чтобы увидеть, насколько изображения похожи друг на друга.

Пожалуйста, дайте мне знать, на каких значениях я должен вычислять вейвлет Хаара. Спасибо, Джесс.


person Community    schedule 03.03.2011    source источник


Ответы (2)


Вы должны рассматривать компоненты R/G/B как разные изображения: создайте одну матрицу для каждого из R, G и B, затем примените вейвлет к их частям независимо.

Затем вы реконструируете R/G/B-изображения из 3-х каналов с вейвлет-сжатием и, наконец, объединяете их в 3-канальное растровое изображение.

person Bernd Elkemann    schedule 03.03.2011

Поскольку eznme не ответил на ваш вопрос (вам нужны отпечатки пальцев, он объясняет сжатие и реконструкцию), вот метод, с которым вы часто сталкиваетесь:

Вы разделяете информацию о цвете и яркости (цветность и яркость) и взвешиваете их по-разному. Иногда вы даже отбрасываете цветность и просто используете часть яркости. Это значительно уменьшает размер вашего отпечатка пальца (~ в три раза) и учитывает то, как мы воспринимаем изображение — в основном по локальной яркости, а не по абсолютному цвету. В качестве бонуса вы получаете некоторую надежность в отношении манипуляций с цветом изображения.

Разделение может быть выполнено по-разному, например. преобразование изображения RGB в YUV или YIQ. Если вы хотите сохранить только компонент яркости, эти два цветовых пространства эквивалентны. Однако они кодируют цветность по-разному. Вот линейное преобразование яркости Y из RGB: Y = 0,299*R + 0,587*G + 0,114*B

Когда вы взглянете на математику, вы заметите, что мы не делаем ничего, кроме создания изображения в градациях серого, принимая во внимание, что мы воспринимаем зеленый ярче красного, а красный ярче синего, когда все они численно равны.

Если вы хотите сохранить немного информации о цветности, чтобы ваш отпечаток был как можно более кратким, вы можете уменьшить разрешение двух компонентов U, V (каждый на самом деле 8 бит). Таким образом, вы можете объединить их обоих в одно 8-битное значение, уменьшив их информацию до 4 бит и объединив их с оператором сдвига (не знаю, как это работает в java). Цветность должна весить меньше по сравнению с яркостью при окончательном расчете расстояния от отпечатка пальца (точечный продукт, о котором вы упомянули).

person DerManu    schedule 21.03.2012