найти ближайший кластер цветов в массиве NumPy из файла изображения - PullRequest
0 голосов
/ 10 апреля 2019

Текущее состояние

  • У меня есть массив массивов (900, 1800, 3), созданный из файла изображения.
  • Это один элемент массива на пиксель: высота 900 пикселей, ширина 1800 пикселей и 3 канала (R, G, B) на пиксель, представленный в массиве.
  • Есть только небольшое число(3-20) уникальные цвета RGB в анализируемых изображениях, поэтому в массиве представлено очень мало различных комбинаций значений RGB.

Цель

  • Определите самые маленькие круглые области на изображении, которые содержат n количество уникальных цветов, где n всегда будет меньше или равно количеству уникальных цветов на изображении.
  • Возвратtop y (по количеству или pct) наименьших областей.
  • "Результатом" может быть просто значение x, y центрального пикселя идентифицированной круговой области и его радиус.
  • I do планирую нарисовать круг вокруг каждой области, но этот вопрос касается наилучшего подхода для первого определения наименьших верхних областей.

The Catch / Caveat

Изображения на самом деле являются сплюснутыми проекциями сфер.Это означает, что пиксель на правом краю изображения фактически смежен с пикселем на левом краю, и аналогично для верхнего и нижнего пикселей.Решение должно учитывать это, поскольку оно анализирует пиксели для идентификации ближайших пикселей с другими цветами. РЕДАКТИРОВАТЬ: эта часть может быть дан ответ в комментариях ниже

Вопрос

Мой первоначальный подход заключается в простом разборе пикселя за пикселем и грубой силепроблема с управляемой математикой координат x / y: возьмите пиксель, работайте наружу, пока мы не достигнем n цветов, отметьте этот пиксель за количество шагов, которое потребовалось наружу, следующий пиксель.Держите верхний y диктант, который переоценивается после каждого пикселя, добавляя любые пиксели, которые составляют верхний y, и сбрасывая любые, которые выталкиваются.Верните этот dict в качестве вывода.

Я знаю, что многим библиотекам Python, таким как scipy, scikit-image, и, возможно, другим нравится работать с изображениями в виде массивов.Я уверен есть метод / подход, который умнее и использует библиотеку или какой-либо кластеризованный алгоритм вместо грубого форсирования, но я недостаточно знаком с пространством, чтобы интуитивно знать, какие методыи libs, чтобы рассмотреть.Вопрос: Что такое псевдокод для хорошего метода / lib, чтобы сделать это правильно?

...