Я пишу программу пользовательского интерфейса, которая управляет промышленным оборудованием.Обработка изображений с точностью до субпикселя
Станок представляет собой автоматический принтер для струйной печати, используемый в электронной промышленности. Точная цель машины заключается в том, чтобы печатать паяльную пасту на голых печатных платах. Система включает в себя 2 камеры, которые образуют систему видения, используемую для определения координат и автоматизации процесса, в котором задействовано оборудование. Проблема заключается в том, что мне нужно иметь возможность находить фигуры и объекты в изображениях, снятых с камер, который достаточно прямолинейный, но - для того, чтобы получить требуемую точность, я должен быть в состоянии сделать это с точностью субпикселей.
Две камеры образуют одну камеру двойного зрения, одна камера будет смотреть на трафарет, а другая смотрит на печатную плату. Камера двойного зрения находится на движущейся каретке, которая перемещается в X и Y. PCB зажимается на столе, чем может перемещаться по X, Y и тете. Система видения используется для определения разницы между позицией печатной платы и положением трафарета, и затем таблица корректируется для выравнивания двух.
РЕДАКТИРОВАТЬ:
Это частичный снимок экрана а, взятым из существующей программы пользовательского интерфейса:
Трафарет изображение является верхнее изображение, печатная плата является нижней, изображения здесь представлены изображения в оттенках серого - в новой системе я использую цвет, но будет использовать оттенки серого.
ПРИМЕЧАНИЕ: Как вы читаете это, вы, вероятно, думаете: «Хорошо, почему бы вам просто не использовать все, что вы используете в существующем пользовательском интерфейсе?» Существующий пользовательский интерфейс написан на VB6, что-то, о чем я хочу отойти, а сторона видения программы - .ocx, написанная сторонней компанией, которая больше не существует.
Я немного поиграл с AForge.NET и нашел, что он действительно прост в использовании, и я смог использовать его, чтобы найти различные формы и найти центр, который был замечательным, но он не имеет точность субпикселей. Однако я мог бы использовать это как отправную точку, а затем применить алгоритм подпикселя к отдельному центральному пикселю или даже всей фигуре.
EDIT:
Вот пример изображения взяты из тестовой программы, которую я написал, используя AForge:
Красный контур и перекрестие, что я добавил в визуальная помощь/эксперимент. Это было сделано с камерой, которую я, скорее всего, буду использовать, которая имеет разрешение 1280 x 1024, однако объектив не является фактическим объективом, который я буду использовать, поэтому изображение слегка «fisheyed». Кроме того, объекты, представляющие интерес, будут лучше света, чем это.
В реальной системе объектив будет смотреть на квадрат размером 10 мм x 8 мм как на трафарете, так и на печатной плате, то есть каждый пиксель будет отображать 7.8125um^2, однако я могу перемещать таблицу XYY с шагом в 1,25um за раз, что бесполезно, если я не могу видеть эти движения с камерой. Мне нужна точность 1um (sub).
Кто-нибудь знает что-нибудь, что я могу использовать для этого?Я искал довольно долгое время, но все, что мне когда-либо казалось, это информация об рендеринге изображений с точностью до субпикселей.
Или, еще лучше, кто-нибудь знает, как я мог написать что-то, чтобы сделать это сам? Я даже не знаю, с чего начать!
Любая обратная связь будет принята с благодарностью.
Планируете ли вы это сделать, объединив два изображения камеры или [подспиксельные вычисления] (http://homepages.inf.ed.ac.uk/rbf/PAPERS/spedraft.pdf)? Я думаю, что последнее требует некоторых знаний о содержании изображения. – TaW
Подпиксельный расчет (спасибо за ссылку, кстати, проливает некоторый свет!) Я отредактировал свой вопрос, чтобы предоставить дополнительную информацию, надеюсь, что это поможет. –
добавьте образцы входных изображений, а также добавьте больше информации, например разрешение, масштаб пикселей и желаемую точность, размер шага перемещения и т. Д., Требуемую субпиксельную точность того, что именно (в отношении вашей геометрии вашего компьютера)? Кроме того, если у вас есть унифицированные условия освещения/цвета, вы можете использовать цвет и интенсивность для каждого типа печатной платы, чтобы вывести субпиксельное положение линии/края из двух соседних пикселей в обеих осях x, y – Spektre