Linear fit for a intensity plot (surface plot)
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
I want to find the rotation angle of this plot. (Angle with respect to the horizontal axis.)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/542326/image.jpeg)
In order to do that I'm thinking of doing a linear fit and get the gradient. Something like this:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/542331/image.png)
How can I do a linear fit to this surface plot?
Thank you.
5 commentaires
Image Analyst
le 8 Mar 2021
Unrecognized function or variable 'smooth2a'.
Error in test5 (line 14)
dataS = smooth2a(data,1,7);
Réponse acceptée
Image Analyst
le 8 Mar 2021
regionprops() fits the image to an ellipse and returns the center and angle in degrees. Try this:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fprintf('Beginning to run %s.m ...\n', mfilename);
fontSize = 15;
data = readmatrix('Rotation.txt');
[rows, columns] = size(data);
subplot(2, 2, 1);
imshow(data, []);
impixelinfo
axis('on', 'xy');
title('Original Data', 'FontSize', fontSize);
subplot(2, 2, 2);
histogram(data);
grid on;
title('Histogram of Data', 'FontSize', fontSize);
mask = data > 30;
% Take largest blob only.
mask = bwareafilt(mask, 1);
subplot(2, 2, 3:4);
imshow(mask);
axis('on', 'xy');
title('Mask', 'FontSize', fontSize);
% Get the angle (Orientation) using regionprops
props = regionprops(mask, 'Orientation', 'Centroid')
angle = -props.Orientation;
xCenter = props.Centroid(1)
yCenter = props.Centroid(2)
fprintf('The angle is %.2f degrees.\n', angle);
x = 1 : columns;
slope = tand(angle)
y = slope * (x - xCenter) + yCenter;
hold on;
plot(xCenter, yCenter, 'r+', 'LineWidth', 2, 'MarkerSize', 30);
plot(x, y, 'r-', 'LineWidth', 2);
caption = sprintf('Angle = %.2f degrees. Slope = %.2f. xCenter = %.1f. yCenter = %.1f', ...
angle, slope, xCenter, yCenter);
title(caption, 'FontSize', fontSize);
g = gcf;
g.WindowState = 'maximized'
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/543266/image.png)
props =
struct with fields:
Centroid: [50.5731822474032 28.7478753541076]
Orientation: -17.0388178322049
xCenter =
50.5731822474032
yCenter =
28.7478753541076
The angle is 17.04 degrees.
slope =
0.30647166070947
2 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Surface and Mesh Plots dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!