Фон
Мои цифровые изображения могут быть считаны в компьютерную программу, такую как Matlab или R, в виде матрицы amxnx 3, где mxn - это количество пикселей, наблюдаемых каждым из трех (красный, зеленый и синий) датчиков, и каждая ячейка в матрице имеет номер от 1-255, что отражает яркость, наблюдаемую датчиком.
Я хотел бы использовать эту информацию, чтобы получить объективную меру зелени на фотографии, потому что я хочу попытаться соотнести зелень с ростом растений (представьте одну картину в день кукурузного поля).
Предыдущая работа в этом направлении имела определенный успех, рассчитав индекс зеленого как
- зеленый% = зеленый / (синий + красный) или
- зеленое расхождение = 2 * зеленый - красный - синий
из изображений веб-камеры для каждого из пикселей mxn, но не было никакого контроля над апертурой или падающим излучением (солнечный угол).
обратите внимание, что я не ищу «абсолютную» меру зелени, масштаб и распределение числа не имеют значения - он просто должен обеспечивать последовательную относительную меру зелени.
Вопрос
Могу ли я использовать свою зеркальную фотокамеру, чтобы получить надежный показатель зеленого цвета, который является инвариантным для любого или всех из следующих:
- облачный покров?
- время суток?
- день года? (это единственное требование)
- доля неба / земли на заднем плане?
Текущее состояние
Я выдвинул следующие идеи, но я не уверен, что было бы необходимо, или какие из них не повлияют на соотношение зеленый / (красный + синий)
- сделайте снимок белого кусочка пластика и используйте это изображение для нормализации других значений
- Исправить диафрагму
- Исправить выдержку
- установить баланс белого с помощью белого листа бумаги
- Возьмите все фотографии под одним углом
- Сделайте все фотографии в солнечный полдень
источник
Ответы:
Если вы сможете обрабатывать файлы RAW, у вас будет массив пикселей Байера, состоящий из строк RGRGRG и GBGBGB (или, возможно, строк RGBGRGBG). Вы можете игнорировать все пиксели R и B, суммировать пиксели G, взять квадратный корень ( поскольку зеленых пикселей в два раза больше, чем красного или синего), разделите их на половину числа G пикселей. Это должно дать вам правильное средневзвешенное значение для «зеленого» на вашей фотографии. Затем вы можете взять среднее значение красного и синего и вычислить ваш зеленый процент из всех трех средних.
Чтобы быть более точным, вы, возможно, захотите учесть правильное взвешивание для красного, зеленого и синего пикселей датчика, поскольку датчики CMOS имеют различную чувствительность к каждой длине волны света. Вес будет зависеть от датчика, как правило. Это был бы простой подход.
Чтобы учесть цветовой оттенок, обусловленный временем суток, различными типами искусственного освещения и т. Д., Может быть более целесообразным предварительно обработать каждую фотографию в таком инструменте, как Lightroom, чтобы сначала исправить баланс белого, а затем выполнить вычисления на стандартных пиксельных изображениях RGB. В отличие от обработки данных датчика RAW, вам нужно взвесить ваши расчеты на основе «зеленой чистоты» пикселя, а не усреднить зеленый компонент в целом. Чем более чистый зеленый пиксель, тем больше его вес по сравнению с пикселями, которые являются более красными или синими. Нормализация баланса белого перед обработкой должна исключить необходимость усложнять иным образом довольно простые вычисления с касательными, разработанными для учета множества факторов, таких как облачный покров, время суток, время года и т. Д.
Возможно, вы по-прежнему хотите учитывать большие области не падающих пикселей, таких как небо. Я не могу вам сильно помочь в этой области, не зная больше о том, чего именно вы пытаетесь достичь. Зеленый цвет "фотографии" в целом, вероятно, будет лучше всего рассчитываться путем вычисления отношения зеленого, красного и синего, которое будет включать пиксели "неба".
Что касается вашей процедуры, то само собой разумеется, что если вы сделаете снимки с одинаковыми настройками камеры при одном и том же источнике света (с одинаковой интенсивностью и цветовой температурой), измеренном по общей базовой линии, такой как 18% серая карта, очевидно, долгий путь к нормализации ваших результатов. В цифровом формате любые расхождения можно исправить с помощью программного обеспечения для обработки RAW и базового инструмента выбора баланса белого, поэтому обязательно снимайте в формате RAW.
Чтобы получить более глубокое представление о расчете "зелености" ваших фотографий. Очевидно, есть простые способы, такие как вычисление веса пикселей зеленого байера по сравнению с синим и красным или вычисление зеленой чистоты по отношению к красной / синей чистоте пикселей RGB. Вам может повезти больше, если вы преобразуете в более подходящее цветовое пространство, такое как HSV ( Hue / Saturation / Value , иногда называемое HSB, заменяя Value на Brightness), и вычисляете количество зеленого, используя кривую в пространстве HUE. (ПРИМЕЧАНИЕ: HSL - это другой тип цветового пространства, и, вероятно, он не был бы идеальным для вычисления количества «зеленого» на фотографии, поэтому я бы использовал HSV. Подробнее об этих цветовых пространствах можно узнать здесь..) Чистый зеленый (независимо от насыщенности или значения) падает под углом 120 ° и падает оттуда, когда вы двигаетесь в направлении красного (при 0 °) или в сторону синего (при 240 °). Между 240 ° и 360 ° в пикселе будет нулевое количество зеленого цвета, независимо от насыщенности или значения.
Рис. 1. График оттенков - зеленая чистота в градусах оттенков.
Вы можете настроить фактическую весовую кривую в соответствии с вашими конкретными потребностями, однако простая кривая может быть похожа на следующую:
Значение для
pureGreen
должно быть 1,0 . Формула для вычисленияgreenness
может тогда быть сделана следующим образом:hue
Является степень цвета от вашего цветового значения HSV. Этоradius
половина,period
в которой зеленый присутствует в некоторой степени. Вscale
подстраивается грех кривой на наш период, таким образом, чтоsin(scale * hue)
пики (возвращает 1,0) , где именно вы имели бы чистый зеленый ( с игнорированием , что интенсивность зелень). Поскольку величинаgreenness
действительна только в первой половине нашего периода, расчет зелени действителен только тогда, когда оттенок больше 0 ° и меньше 240 °, а его ноль - для любого другого оттенка.Вы можете отрегулировать взвешивание, отрегулировав период, диапазон, в пределах которого вы можете определить диапазон
green
(т. Е. Вместо 0 до 240, вы могли бы установить ограничение как40 > hue > 200
вместо этого), и определить что-либо за пределами этого диапазона, чтобы иметь зеленость 0 Следует отметить, что это будет математически точно, однако оно может быть не совсем воспринимаемым. Вы можете, конечно, настроить формулу, чтобы настроить точкуpure green
больше в сторону желтого (что может дать более точные для восприятия результаты), увеличить амплитуду кривой до плато и расширить полосу чистого зеленого до диапазона оттенка, а не одного значение оттенка и т. д. Для полной точности восприятия человека более сложный алгоритм обрабатывается в CIE XYZ и CIE L a b *пространство может потребоваться. (ПРИМЕЧАНИЕ. Сложность работы в пространствах XYZ и Lab значительно возрастает по сравнению с тем, что я здесь описал.)Чтобы вычислить зеленоватость фотографии, вы можете вычислить зеленоватость каждого пикселя, а затем получить среднее значение. Затем вы можете взять алгоритм и настроить его под свои конкретные потребности.
Вы можете найти алгоритмы для преобразования цвета в EasyRGB , например, для RGB в HSV:
источник
Проект ГЛОУБ ?
Не используйте белый лист бумаги. Они содержат оптические отбеливатели, которые преобразуют часть ультрафиолета в синий свет, вызывая неправильную экспозицию. Вот почему существуют коммерческие серые карты (как полагает Джриста).
Снимать все фотографии с одного и того же места, безусловно, правильный подход. Что касается выдержки и диафрагмы, это не должно иметь значения. Скорость затвора не меняет цвет вообще, диафрагма размывает изображение, но я думаю, что этот эффект исчезает в любом случае, когда вы суммируете все значения пикселей. Я бы лучше постарался получить постоянную экспозицию.
Что касается разницы между затуманенным и не затуманенным, вы можете просто запустить несколько тестов. Если истинное количество зеленого не меняется быстро (то есть с сегодняшнего дня до завтра), то это не должно происходить при изучении изображений. Возможно, в этом поможет эмпирический подход (например, если вы обнаружите, что зеленость всегда на 10% выше, когда она затуманена, вы можете это компенсировать).
источник
Я бы посоветовал снимать «RAW» и конвертировать в 16-битный формат TIFF, используя автоматический баланс белого камеры, но без коррекции гаммы (т. Е. С цветовым балансом, но с линейным выходом). 16-разрядный режим позволит лучше рассчитать коэффициенты и индексы в глубоких тенях и светлых участках (т.е. без ограничения). DCRAW может сделать это, но ваша камера будет поставляться с собственным программным обеспечением, которое, вероятно, проще в использовании.
Если вам нужны индексы, тогда RGB - действительно единственное полезное цветовое пространство. Вы уже упоминали индекс «зеленой дивергенции» (также называемый «избыток зеленого индекса») - этот алгоритм и тесно связанный с ним алгоритм «зеленых листьев» работают очень хорошо. Если вы хотите выполнить классификацию пикселей на основе цвета (то есть, вегетарианство или не-вегетарианство), я бы внимательно посмотрел на цветовое пространство L a b *, а не на HSV / HSI. Существует на самом деле очень хороший демо на сайте Mathworks , которая иллюстрирует L Aб * анализ. Классификацию можно было бы объединить со спектральным анализом, чтобы ответить на вопросы: а) сколько зеленых пикселей и б) насколько они зеленые? Это может быть более полезным, чем просто индекс зелености, на который также будет влиять фоновое спектральное качество (почва, мусор и т. Д.), Которое также может со временем меняться. Вы упомянули урожай кукурузы, поэтому я предполагаю, что вы направили камеру вниз, а не вверх?
Если бы у вас было две камеры, то вы могли бы комбинировать нисходящие изображения (измерение зелености) с восходящими изображениями, которые измеряют растительный покров. Восходящие изображения не будут подходить для спектрального анализа, а классификация пикселей будет основываться на контрасте между небом и небом, возможно, с использованием только синего канала изображения RGB.
Если вы собираете (ежедневные?) Временные ряды, то вы можете разделить нисходящие изображения на изображения «облачного дня» и изображения «солнечного дня» и проверить наличие смещения. Вы можете поиграть с цветовым балансом во время необработанной обработки, чтобы исправить смещение, если оно есть, или просто изменить масштаб одной серии, чтобы она соответствовала другой (сделайте это проще), предполагая, что солнечные и облачные дни чередуются.
Веселиться.
источник