Определение площади шкуры.

From
Aleksey Malov (2:5052/30.8)
To
All
Date
2002-10-23T18:41:36Z
Area
RU.ALGORITHMS
Hi, All!

 В общем, есть видеокамера, подключенная через TV-Tuner к PC. Есть измерительный стол, над которым расположена эта видеокамера на высоте около 6 метров. На стол кладется кожа. Надо определить ее площадь. Получить картинку с камеры, залочить буфер и подсчитать число точек темнее заданного уровня не составило проблем, благо WinAPI предоставляет универсальный интерфейс для доступа к мультимедиа устройствам. Вся фишка в том, что объектив у видеокамеры искажает изображение - по краям изображение более мелкое, чем в центре экрана. Эти искажения игнорировать нельзя в виду их довольно заметной величины - эталонный шаблон площадью 50 дм2 посередине стола в центре стола показывает площадь, как и положено, 50 дм2, а по краям - 46.2 дм2. Лист формата A4 выглядит на углах стола, как параллелограмм. Необходимо осуществить измерение площади с учетом искажений, вносимых объективом.

 Есть следующие соображения:
 Надо не просто считать количество "черных точек", а при встреченной "черной" точке прибавлять к вещественному счетчику некий коэффициент. Т.е. как бы каждый пиксель экрана имеет свою отдельную площадь, зависящую от его положения на экране.
 Конечно, рассчитывать отдельное float-значение для каждого пикселя - дело расточительное. Поэтому можно подсчитывать число "темных" точек внутри блока размером, например, 8*8 пикселей, а потом умножать это количество на усредненный коэффициент для этого блока. Теперь вопрос - как эти коэффициентя считать? Варианты:

1. Посчитать площадь эталона в 9 точках экрана (в центре, в углах и посередине границ). Потом интерполировать квадратическими сплайнами. Напомните, плиз, формулу биквадратной интерполяции.

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)))

  Но с каждой итерацией "флуктуации" коэффициентов становятся все больше и больше. Эта формула даже не может найти корни уравнения:

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)