Да я не про это хотел сказать - на реальном объекте падают тени, блестят грани, он подпрыгивает от вибрации, резкость наводится неидеально и т.д. и т.п. Поэтому ценность этих "сеточек" в реальных приложениях очень условна. Они работают, конечно - кто спорит, просто вживую будут другие проблемы и другие условия.
Вам хочется просчитать все заранее и теоретически? Это невозможно! Потому что на практике будет масса параметров, которые невозможно учесть.
Я понимаю и тем не менее почему бы не иметь предварительную оценку? Это позволит в последующей обработке как то ориентироваться в результатах, вообще понимать я на правильном пути или нет, или просто ошибка в программе. А в моей ситуации когда каждый шаг с нуля это еще и позволит как то освоить основные понятия.
Практически работает _только_ один способ - откалиброваться на месте. Взять десяток реальных или изготовленныых "идеальных" таблеток в реальных условиях освещения, резкости, механической жесткости конструкции - померить каждую микрометром и откалибровать вашу камеру по ним.
Это означает изготавливать самим идеальную таблетку. Не представляю себе во что это может обойтись. Плоскую, цилиндрическую еще можно. Но как по ней калибровать? Не вижу до конца процедуру. Как только с ее помощью измерить дисторсию? С помощью сеток же примерно ясно как это сделать: просто померить программно искривления на изображении и аппроксимировать их. Как это сделать без сетки?
GraphD,
Без микрометра будет точнее, принтер же есть 1200т/д
Значит дело за тем чтобы найти файл с изображением сетки(точек) и отпечатать его размером 20х20 мм? Но принтер даст 20+/- сколько мм? Скажем точки через миллиметр, 400 точек. Я бы сам сделал такой файл, но у меня такое недоверие к матлабу... видно невооруженным глазом что точки разные по размеру получаются, печать еще добавит искажений... не знаю, попробую. Я бы миллиметровку взял, но тогда специальную программу для нее писать надо, с точками вроде проще.
а что корел дро уже не катит? печатаем на А4 линию длинной 200 мм меряем её штангенциркулем, если что вводим коррекцию для печати вуаля, доли миллиметра в кореле будут на бумаге пропечатаны. любые миры в кореле оч удобно рисовать)
А м.б. уже пора применить к данному заданию нормальную экспертную систему? Скоро смогу выложить самую свежую версию моей программной платформы AIAssistant. В нее напрямую с помощью встроенного в нее OpenCV, можно закачивать изображения с камеры, производить экспертные логические выводы, формировать диалог с пользователем в виде удобного обычного GUI. В таблетках есть множество проблем, основой которых по большей части является изменчивость реального наблюдаемого поля зрения. Удобнее было бы сделать всю систему обучающуюся в определенных пределах учителем и самостоятельно. Это позволило бы улучшить характеристики системы. Со своей стороны я мог бы помогать вам в вашем программировании на языке ECLIPS. Конечно, это всего лишь мое предложение. Вам решать.
Tur писал(а):Значит дело за тем чтобы найти файл с изображением сетки(точек) и отпечатать его размером 20х20 мм? Но принтер даст 20+/- сколько мм? Скажем точки через миллиметр, 400 точек.
Очень просто, в Word графикой рисуешь квадраты, указывая размеры и позиции, затем масштабируешь в N раз и отдаёшь на печать, получается точно те размеры, что вводил. Работы на 15 мин. В методе Zhanga используются матрицы до 10х10 тчк, больше смысла нет...
Michael_K писал(а):Да я не про это хотел сказать - на реальном объекте падают тени, блестят грани, он подпрыгивает от вибрации, резкость наводится неидеально и т.д. и т.п.
я так понял товарищу Туру именно геометрию посчитать надо, а как потом таблетки измерять - ещё такого вопроса не вставало.
Виктор Казаринов, спасибо за предложение, возможно я им воспользуюсь.
В таблетках есть множество проблем, основой которых по большей части является изменчивость реального наблюдаемого поля зрения.
Я этого не понял. Не могли бы Вы это пояснить. Предполагается что наша система будет работать так: система установлена на линии или в лаборатории. система переведена в режим калибрации. Фотографируется матрица и процессором вычисляются все необходимые параметры. Все, теперь система может работать. Т.е. мне необходимы алгоритмы если и не полной калибрации, то по крайней мере устранения дисторсии и введения сетки/системы координат на пиксели чтобы можно было измерять. Конечно полная калибрация была бы идеальным вариантом, но пока она мне не по зубам, с дисторсией бы разобраться.
GraphD, Ваша идея с принтером оказалась наилучшей, спасибо. Теперь могу хоть что то реальное начать делать хотя бы как подготовку. Сделал все на матлабе, сфотографировал точки своим домашним олимпусом IR-500
видно не вооруженным глазом что есть дисторсия. а вот вырезка из этой картинки
по этой вырезке можно оценить резолюцию олимпуса, примерно 17 пар линий на мм вот график яркостей для этой вырезки с плоскотью-уровнем по которому можно отсекать затемненные места, но как это сделать эффективно?
не видно как измерить коэффициенты F3, F5... Вот параметры двух объективов одной серии с фокусным расстоянием 17.5 мм и 25 мм(раньше я их уже приводил)
Что за параметры указаны в дисторсии? Почему два параметра: диагональ и горизонталь? Как они скачут от рабочей дистанции. С чего бы это? Почему два параметра, ведь объектив круглый. Как то это не согласуется с википедией с идеей радиальной дисторсии.
GraphD, я не понял только зачем пиксели инвертировать. Скоро закончу получение координат подобных сеток. Что дальше - вот вопрос... Пытаюсь понять Вашу статью
Там есть итерационный алгоритм. Подойдет ли он мне?
Есть еще вопрос на другую тему. Один человек производит зубчатые колеса и другие детали правильной формы. Их можно отсканировать на производственной линии и т.о. получить размеры детали. Предлагается сравнивать эти размеры с приведенными в формате DXF. С этим форматом я до сих пор не работал, не знаком. Вопрос: можно ли из этого формата извлечь программно точные размеры детали-эталона? На сколько я понял DXF не картинка, а чертеж. Если он упрощен до одной проекции, то можно ли с него без автокада снять размеры детали хотя бы плоские? Написать на чем-нибудь exe и все. Он хочет чтобы при смене файла установка сама отбраковывала новые детали по новому шаблону.
Поторопился я с предыдущим постом, с теми вопросами. С координатами исходных точек все просто и ясно. Вот они наложенные на исходное фото.
А вот те же точки на графике (ось Y только не перевернута)
внутри белых точек их приближения по центру масс. При более детальном рассмотрении приближения вовсе не внутри конечно же. Вот первые четыре точки (белые точки - целопиксельные, синие - их приближения)
4+4 points.PNG (6.19 КиБ) Просмотров: 2853
сумма всех отклонений по Y, т.е. сумма всех разностей между целыми значениями строчек и их приближениями для всех 2500 точек примерно 30. Для Х, т.е. для колонок получилось примерно 43. Должны то быть нули, но получаются вот такие числа. С первым шагом разобрался, алгоритм работает надежно, начинаю с центра картинки и иду к верхней левой точке... Но что дальше, как дисторсию исправлять, пока неясно.
GraphD, видимо я что то капитально не понимаю в этой компенсации дисторсии. Ваш код основан на k1 и k2, а они то как раз и неизвестны, их то и надо определить, в этом вся проблема. А как их можно определить? Видимо опираясь на свойства исходных точек, на то что они расположены группами лежащими на прямых линиях и/или на равенство расстояний между точками. Так? Если так, то видимо следует основываться на формулах 3.7 - 3.11, но их я не понимаю. Разобрать бы какой-нибудь пример, тогда наверное все бы стало ясно. Если скажем на сцене имеем три точки A, B, C, лежащие на одной прямой и их изображения Ad, Bd, Cd. Допустим также что AB = BC. Известен также центр матрицы О(xo, yo).
AdBdCd.PNG (3.69 КиБ) Просмотров: 2765
Реально есть на изображении только точки Ad, Bd, Cd, и О(xo,yo). Синие точки Ad,Bd,Cd, я специально сместил по векторам ОА,ОВ,ОС как бы получая подушко-образную дисторсию.Вот теперь бы записать все уравнения и понять алгоритм нахождения k1 и k2... Скажем находим прямую по точкам Ad, Bd, Cd. Пересечения этой прямой с прямыми ОАd,ОВd,ОСd и дадут искомые точки A, B, C. (обошлись без k1 и k2 ) Бред конечно, но каков же здесь алгоритм?
Вот это меня останавливает
3.12.PNG (2.83 КиБ) Просмотров: 2733
как записать эту формулу? С Марквардтом разберусь потом.
Статья требуется только как иллюстрация процесса компенсации, а калибровать нужно zhang-ом, т.е. шахматной доской. У zhang-а просто небыло нужного этапа компенсации, в этом и была проблема.
Извиняюсь, опять ничего не понял: я же хочу не калибровать (на первом этапе по крайней мере), а дисторсию скомпенсировать без калибровки. И это возможно на сколько я понял из статьи. Вот цитата из введения
In our work, we propose to estimate and compensate for the radial lens distorsion without full knowledge of 3-D point coordinates. In this case, only radial distorsion parameters are estimated, unlike the extrinsic and intrinsic parameters of the linear camera.
Там дальше описан метод и алгоритм как они предлагают это делать. Но я пока плохо понимаю это, так что мне нужна помощь именно в этом. Разве я не на верном пути?
Как зачем? Чтобы ее скомпенсировать. Как скомпенсировать дисторсию без k1 и k2 ? Статья утверждает что можно скомпенсировать дисторсию, т.е. узнать k1 и k2 без знания внешних и внутренних параметров камеры. Я поэтому и ухватился за эту статью. В ней предлагается считать гомографию (формула 3.2). Пытаюсь разобраться с этим, но вряд ли смогу это сделать без помощи.