1

Как правило, меня интересует реализация нейронной сети для решения проблемы формы при затенении. До сих пор, для начала, я получил простую форму от реализации затенения.Что было бы правильным методом извлечения объектов для различения ориентации трехмерных затененных цилиндров?

В частности, с этим вопросом, однако, я собираюсь обучить регрессионную модель, которая изучит трехмерную ориентацию цилиндра в 3d-пространстве, учитывая его затенение. Каждое изображение представляет собой трехмерный затененный цилиндр в оттенках серого. По сравнению с набором данных размер и ориентация различаются.

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

Как я нашел обширную литературу по этой проблеме, я быстро понял, что то, что мне нужно на данный момент, должно быть намного проще. Поэтому мне просто нужен совет: что будет правильным дескриптором изображения, подходящим для проблемы выше?

ответ

0

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

Во-первых, поскольку вопрос задает проблему плохо, я должен указать, что у меня есть набор серых цилиндров, освещенных из одного источника сверху.Цилиндры могут вращаться, меняться по размеру и перемещаться. Задача состоит в том, чтобы изучить вращение цилиндра, инвариантное к размеру и положению.

0) Образец цилиндра для рукоделия - это тот. enter image description here

1) Набор двумерных Габоров используется для захвата градиента внутри цилиндра. Чтобы найти правильные параметры Габора, я менял ширину полосы и размер фильтра вручную, пока не было видно, что внутренний градиент обнаружен, а также ребра. На рисунке показан асимметричный Габор слева и две свертки этого точного фильтра с исходным изображением цилиндра. Поскольку свертки накладываются на изображение в градациях серого, видно, что разные ориентации фильтра дают ответы на разных участках цилиндра. Самые сильные ответы на краях, но есть более слабый ответ на внутреннее затенение цилиндра. Этот внутренний градиент - это функция, которую мне нужно извлечь. enter image description here

2) Теперь, чтобы получить этот затеняющий градиент, я избавлюсь от краев, объединив ответы от 8 ориентаций Габора. В принципе, взятие максимума над всеми восемью свертками на каждом пикселе дает хорошую оценку ребер вокруг этого цилиндра. Однако ребра не совсем то, что нужно, поэтому из этого максимального изображения я создаю битовую маску, чтобы избавиться от них и получить только внутренний градиент. Короче говоря, я порою слабых ответов, чтобы получить только краевое изображение, применить утолщение и закрыть морфологические операции. Затем примените логический И к этому утолщенному краю, а максимальная свертка превращается в черно-белое и, наконец, разрушает его. Результатом является маска патча, приблизительно размер внутреннего градиента цилиндра. Теперь я просто применил эту битовую маску к оригиналу, чтобы получить ответы Gabor только на внутреннее затенение, без информации о краю. На изображении показано слева направо, максимальное вытягивание ответов фильтра, битмаска, построенная с помощью операции с морфологией изображения, описанной выше, и полученный внутренний градиент после применения битовой маски. enter image description here

3) Теперь, как только градиент затенения находится там, он должен получить функцию, представляющую первоначальную ориентацию, устойчивую к положению и размеру. Кажется, этого достаточно, чтобы усреднить все ответы этого внутреннего градиента, сохраняя при этом первоначальную ориентацию Габора. Таким образом, с 8 ориентациями Габора вектор признаков будет 8-вектором средних ответов во всех точках выборки во внутренней области градиента, извлеченной на предыдущих этапах. Чтобы не учитывать каждое значение одного пикселя, я уменьшаю изображение, беря каждый пятый или пятый. Чтобы эмпирически видеть, что градиент выбран правильно, левое изображение представляет собой векторный график, где каждая стрелка ориентирована в направлении оригинального Габора, и она пропорциональна до тех пор, пока сильный ответ. Таким образом, точки на изображении и, что важно, ребра, показывают реакции с нулевой силой, в то время как стрелки фактически указывают направление градиента. Теперь я могу потенциально принять среднее значение для каждой ориентации для ненулевых значений, поэтому на правильном рисунке показаны гистограммы всех ненулевых ответов по 8 ориентациям для данного цилиндра, где каждая синяя линия является ответом на одном пикселе выборки. Я также приведу пример другого изображения цилиндра, где из открытой внутренней части цилиндра происходит некоторый шум, а площадь градиента, как правило, меньше. enter image description here

4) Наконец, чтобы получить эту 8-векторную функцию с некоторой инвариантностью по положению и размеру (и, возможно, некоторой интенсивностью освещения), я усредняю ​​для каждой ориентации сумму всех ненулевых ответов по всем не- -зеровые ответы. Эта функция проиллюстрирована красным цветом на той же гистограмме, что и выше, которая была нормализована и взята без отрицательных значений, поскольку они являются симметричными. Я бросил пару других цилиндрических ориентаций, чтобы показать определенную степень инвариантности. Конечная 8-векторная функция находится красным слева от цилиндра.enter image description here

Наконец, это может быть дано регрессионной модели, которая изучает ориентацию. Однако одной очевидной проблемой является отклоненный градиент вогнутости, который указывает на ориентацию по 3-й оси (одна указана на зрителя, как показано на рисунке @jnovacho). К счастью, это может рассматриваться по-разному в рамках другой проблемы, для которой мне нужна эта функция.

1

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

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

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

Последним шагом было бы рассчитать фактическое преобразование в пространстве. Вы должны были бы учитывать плоскость проекции и транскрипцию проекции, но я думаю, что это должно быть возможно.

EDIT: http://i.imgur.com/7GpbSE7.png

Я создал этот простой образ цилиндра. Затем я уменьшил количество цветов до 16. Как вы можете видеть, отдельные оттенки серого теперь видны. Я думаю, что нужно использовать края областей для приближения вращения цилиндра.

В моем случае использовался параллельный осветительный двигатель, поэтому края на самом деле являются линейными сегментами. Но если бы я использовал двигатель точечного освещения, egdes имели бы другую форму - они были бы частью эллипса.

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

PS: У вас есть данные по образцу?

+0

Благодарим вас за полезный комментарий, @jnovacho, я не понимал, что должен делать оси отдельно. С осями Z это понятно, но для X, Y: можете ли вы подробно остановиться на «градиентном подходе» и/или указать на определенные методы? Также, если есть шанс, я все еще надеюсь не использовать отдельные алгоритмы для извлечения Z (как определено в ответе) и осей X, Y. Интересно, что произойдет, если я применяю различные дескрипторы изображений, которые вычисляют ориентацию градиента, например SIFT или SURF, а затем подают его в классификатор. Я еще не знаком с кем-то из них, поэтому это мышление может быть слишком наивным. –

+0

или EDIT: на самом деле вы правы, с отдельными оттенками серого может быть возможно облегчить пороговые краевые детекторы. Это классная идея! Что усложняет мне кое-что, так это то, что раньше я не делал какой-либо вычислительной геометрии, поэтому вчера я провел целый день, чтобы нарисовать простой цилиндр. С другой стороны, мне не нужно точно/аналитически вычислять исходную позицию. Мне скорее нужно вычислить набор функций из затенения цилиндров, которые позволяют грубо классифицировать 3d-ориентацию. Создание набора данных - еще одна проблема, у меня только 1 образец: http://imm.io/1iyBI –