Цитата(tmtlib @ Oct 22 2011, 18:35)

Здравствуйте! Я хотел бы сделать простейшее преобразование Хафа для этой функции, чтобы выделить её на изображении. По аналогии с поиском линий я предположил, что результат преобразования - это максимум "аккумулятора" в пространстве параметров "A-B". Для этого я выразил функцию через B:
(1) исходная функция y=A^2*x / sqrt( A^2 * x^2 + B^2)
(2) выражаем через B=sqrt( (A^4*x^4)/y^2 - A^2*x^2 )
Далее казалось бы всё просто: для каждого закрашенного пикселя на картинке (x,y) подставляем эти координаты в формулу (2) и пробегаем все значения A из интересующего диапазона, получая пары чисел A-B. Так для каждой точки изображения X-Y будет соответствовать некоторая кривая в координатах A-B. Точка с наибольшим количеством пересечений и есть параметры искомой функции. Подставляя найденные A и B в формулу (1) можем численно нарисовать кривую поверх растрового изображения.
Но у меня что-то функции (2), назову их "параболы", пересекаются только в начале координат, соответственно невозможно по этим данным найти параметры A-B - они всегда равны нулю A=0, B=0.
Подскажите, что не так!
Во-первых, у Вас очепятка, должно быть либо y=A^2*
x^2 / sqrt( A^2 * x^2 + B^2), либо B=sqrt( (A^4*
x^2)/y^2 - A^2*x^2 ), но это я думаю просто формулу невнимательно набили

Во-вторых, в качестве параметров лучше использовать не A и B, а A^2 и B^2. Ну, или A и B^2. В этом случае уходим от проблемы интерпретации комплексных значений параметра B, а таких будет много

.
Ну и в-третьих, у Вас функция сильно нелинейная, а значит на результат будет катастрофически влиять все исходные данные: диапазон изменения параметра A, шаг с которым он изменяется (шаг квантования параметров), координаты точек x,y которые берутся для расчетов, шум.
Чем уже диапазон изменения параметра A относительно искомой величины и чем меньше шаг квантования, тем лучше будет результат. Аналогично, чем меньше значение параметра B в исходной кривой, тем в более узком диапазоне координат x и y необходимо вести поиск.