2012-03-26 5 views
0

Я хотел бы извлечь наиболее распространенный цвет растрового изображения. Моя первая идея состояла в том, чтобы сделать это, перейдя через bitmapData и извлекая каждый цвет пикселя и сохраняя его в массиве.Наиболее распространенный цвет в растровом изображении (данные)

Но функция должна быть как можно более легкой, поэтому мой вопрос: Есть ли более легкий подход для достижения этого?

Эта функция используется для извлечения фонового цвета растрового изображения.

ответ

0

Нельзя ли просто предположить, что, например, верхний левый пиксель является частью фона и использует этот цвет?

+0

хорошая идея, она не на 100% уверена, но это мое собственное предложение не является ни тем, ни другим – user1266573

0

В зависимости от вида визуальной информации представленный вариант Monte Carlo method может поместиться. В частности, если вы показываете фотографические изображения, то случайная выборка (где random is weighted) даст вам достаточно справедливое представление. Например, вы можете использовать xor-shift random (как это было бы быстрее, чем AS3 Math.random()) и считывать значения цвета из ByteArray, сгенерированные из BitmapData, таким образом: pixels.readUnsignedInt(xorShiftRandom() * pixels.length) в случае, если BitmapData использует формат ARGB.

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

Вы также можете предварительно обработать изображение (путем понижающей дискретизации). У меня нет никаких математических доказательств, но похоже, что вам не понадобится изображение размером более 255х255 для достижения желаемых результатов.

0

Вы можете масштабировать растровое изображение, придавать ему большое размытие, а затем выбирать цвет в средней точке.

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