how to rotate an array about the best fit line
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Stephen Devlin
am 9 Mai 2018
Beantwortet: Image Analyst
am 9 Mai 2018
Hi,
I have some data taken from analysing circles in an image and want to be able to straighten the line as its being on a slope is an artefact of the scanning. I have fitted a best fit line and wanted to know if I could rotate the data until the best fit line was parallel with the x-axis? Any ideas or is this not possible?
Best regards,
Steve
close all
clear all
clc
centers=[1296.28613359921,15.9423957420192;1244.60658858455,16.5186862922104;390.379594009879,19;775.563580322536,16.9590472427110;256.101009617993,18.7276757275163;658.253941157542,18.2915405544281;289.482449670956,18.5636285011201;507.304238398890,20.3078955046754;692.113672662873,16.6656418306859;976.498832075336,16.4348647865777;222.603443863265,19.4801906970668;591.449235930304,18.8160349909942;624.831583420586,18.8490766293560;122.251099674639,18.5291400151088;1077.71234033461,17.1523494179665;4.98592612631937,20.4982856165640;893.025740410572,15.8528339538963;1112,16;876.389956316530,16.7010325410232;675.391032220651,18.9364395893170];
format short
%%Data Analysis
%using the data in centers and radii
hFig2=figure('units','normalized','outerposition',[0 0 1 1]);
set(0,'CurrentFigure',hFig2)
subplot(4,1,1);
%plot of centers position
SortedCenters=sortrows(centers,1)
x=SortedCenters(:,1);
y=SortedCenters(:,2);
title('Centers x y')
box on
grid minor
hold on
scatter(x,y)
set(0,'CurrentFigure',hFig2)
subplot(4,1,2);
scatter(x,y);
hold on
p = polyfit(x,y,1)
f = polyval(p,x)
plot(x,f)
xlabel('X pos')
ylabel('Ypos')
title('2.basic centers data with a least squares fit line')
box on
grid minor
hold on
format short
% how to straighten the plot?
0 Kommentare
Akzeptierte Antwort
Star Strider
am 9 Mai 2018
If you want to eliminate the slope of the regression and plot your results parallel to the x-axis, subtract the fit at each point from the data at each point:
p = polyfit(x,y,1);
f = polyval(p,x);
plot(x, y-f)
If I understand correctly what you want to do, that should work.
0 Kommentare
Weitere Antworten (1)
Image Analyst
am 9 Mai 2018
Use p to get the angle that you can then use in imrotate() to straighten your image. I think it should be something like:
slope = p(1);
intercept = p(2);
angle = atan2d(slope);
rotatedImage = imrotate(originalImage, -angle);
0 Kommentare
Siehe auch
Kategorien
Mehr zu Linear and Nonlinear Regression finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!