#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.