Мера кривизны квадратичного многочлена в Matlab

#image #matlab #plot #polynomials

#изображение #matlab #график #многочлены

Вопрос:

Я строю многочлен второго порядка, используя следующий код в Matlab:

  xx = 1 : 4000;
 mu =    1.0e 03 * [ 2.0733; 0.6569];
 b = 198;   
 P = [2.5577,   -1.0134,  102.4344];

 figure;imshow(img,'border','tight');
            hold on;
 plot(xx,polyval(P,xx,[],mu) b,'LineWidth',1.5,'Color','r');
 

В результате получается следующее изображение:

введите описание изображения здесь

Однако, если я закомментирую figure;imshow(img,'border','tight'); , это покажет следующую кривую:

введите описание изображения здесь

Во-первых, я не знаю, почему эти два графика отличаются и какой из них является правильным графиком многочлена.

Во-вторых, я ищу меру степени изгиба для объекта, показанного на рисунке 1, чтобы я мог сравнить два объекта с низким или высоким изгибом (кривизной). Однако я не знаю, как извлечь такую меру из формулы полинома. Я пытался использовать коэффициент x^2 (P(2)), но я не уверен, является ли он представителем кривой на рисунке 1, потому что на рисунке 2 показано что-то другое.

Комментарии:

1. Да, вы можете количественно определить изгиб объекта по его второй производной или, что эквивалентно, (в 2 раза) коэффициенту x^2 . Взгляните на эти страницы, если вы пытаетесь количественно оценить изгиб: это и это .

2. Если вы хотите увидеть одинаковую кривизну на изображении и графике, поиграйте с axis . Попробуйте axis xy сразу после imshow , чтобы понять, что я имею в виду.

3. @Dev-iL спасибо, он переворачивает изображение, но все равно две кривые разные. Я не знаю, имеет ли масштабирование какое-то отношение к этому.

Ответ №1:

Первая часть: если вы имеете в виду знак кривизны, вы должны заметить системы координат в изображении или в матрице и в графике. Когда мы plot , как на вашем графике, обычно нижний левый угол соответствует минимуму как по оси x, так и по оси y. В то время как в системе координат изображения у вас есть что-то вроде:

Координация (с индексом строки и столбца) начинается с верхнего левого угла.

Другим визуальным различием между двумя кривыми является их абсолютная кривизна, и это связано только с ограничениями оси. Если вы установите границы оси равными, вы увидите две одинаково изогнутые кривые. Используйте xlim и ylim для этой цели.


Вторая часть: если вы хотите количественно оценить нагрузку / давление / вес, применяемые к системе, абсолютное значение коэффициента x^2 является монотонной переменной. Поэтому вы можете полагаться исключительно на него и калибровать его, применяя различные известные величины напряжения к системе.

Комментарии:

1. Я новичок в Matlab, как я могу установить пределы оси? Мне нравится быть уверенным, что они равны. Какова роль mu . В любом случае, вы не сказали, как количественно определить степень изгиба.

2. используйте xlim и ylim для установки пределов оси. Чтобы узнать все о polyval и его входных аргументах, просто проверьте это.

Ответ №2:

Радиус кривизны равен (1 (dy / dx) ^ 2) ^ 3/2 по всему d ^ 2y / dx ^ 2.

Или поместить его в псевдокод

      /*
         curvature of ax*x   b*x   c, given x
     */
     curvaturequad(a, b, c, x)
     {
        dybydx = 2*a*x   b;  // first derivative
        d2ybydx2 = 2 * a;    // second derivative

        dybydx2 = dybydx*dybybx;
        numerator = sqrt(dybydx2   1)*(dybydx  1);
        return numerator / d2ybydx2;
     }
 

Комментарии:

1. Что это? Это не код MATLAB (если это псевдокод — пожалуйста, так и скажите — чтобы не путать потенциальных читателей). Также в нем не рассматривается 1-я часть вопроса OPs.