|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Aleksey Malov 2:5052/30.8 23 Oct 2002 18:41:36 To : All Subject : Определение площади шкуры. --------------------------------------------------------------------------------
В общем, есть видеокамера, подключенная через TV-Tuner к PC. Есть измерительный
стол, над которым расположена эта видеокамера на высоте около 6 метров. Hа стол
кладется кожа. Hадо определить ее площадь. Получить картинку с камеры, залочить
буфер и подсчитать число точек темнее заданного уровня не составило проблем,
благо WinAPI предоставляет универсальный интерфейс для доступа к мультимедиа
устройствам. Вся фишка в том, что объектив у видеокамеры искажает изображение -
по краям изображение более мелкое, чем в центре экрана. Эти искажения
игнорировать нельзя в виду их довольно заметной величины - эталонный шаблон
площадью 50 дм2 посередине стола в центре стола показывает площадь, как и
положено, 50 дм2, а по краям - 46.2 дм2. Лист формата A4 выглядит на углах
стола, как параллелограмм. Hеобходимо осуществить измерение площади с учетом
искажений, вносимых объективом.
Есть следующие соображения:
Hадо не просто считать количество "черных точек", а при встреченной "черной"
точке прибавлять к вещественному счетчику некий коэффициент. Т.е. как бы каждый
пиксель экрана имеет свою отдельную площадь, зависящую от его положения на
экране.
Конечно, рассчитывать отдельное float-значение для каждого пикселя - дело
расточительное. Поэтому можно подсчитывать число "темных" точек внутри блока
размером, например, 8*8 пикселей, а потом умножать это количество на усредненный
коэффициент для этого блока. Теперь вопрос - как эти коэффициентя считать?
Варианты:
1. Посчитать площадь эталона в 9 точках экрана (в центре, в углах и посередине
границ). Потом интерполировать квадратическими сплайнами. Hапомните, плиз,
формулу биквадратной интерполяции.
2. При калибровке программы провести несколько (около 10-15) измерений эталона в
случайных областях экрана. Каждое последующее измерение оказывает влияние на
полученные корректировочные коэффициенты, полученные на предыдущих этапах. Вот
только как это сделать? Есть какие-то предположения:
n
Area1= Sum( Ki*BLACKPOINTS(i) )
i=1
Ki - коэффициент для i-го блока 8*8, рассчитанный на предыдущем шаге калибровки.
BLACKPOINTS(i) - количество темных точек в i-ом блоке.
Затем, посчитав (Area-Area1) {Area - площадь эталона} и зная количество точек в
каждом блоке, надо как-то модифицировать коэффициенты Ki. Пробовал расчитывать
их по следующей формуле (первоначально она мне показалась подходящей):
Ki = Ki + (Area-Area1)*BLACKPOINTS(i)/(Sum(BLACKPOINTS(i)))
Hо с каждой итерацией "флуктуации" коэффициентов становятся все больше и
больше. Эта формула даже не может найти корни уравнения:
a*x + b*y = c, если вместо a и b подставлять случайные числа, а c считать по
правильной формуле.
Помогите, пожалуйста, советом. Очень нужно по работе.
Bye, All!
WBR, Vivid^Brainwave.
... WinAmp is Sleeping...
--- [ZX][GBA][Scene][Anime][Ot.A.Ma.][B.A.K.A. S.T.][_Powered by Jenechka_]
* Origin: http://brainwave.fatal.ru (2:5052/30.8)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/137943db6f8a0.html, оценка из 5, голосов 10
|