필터 지우기
필터 지우기

Ellipse angle dimension and axis

조회 수: 1 (최근 30일)
elis02
elis02 2021년 5월 26일
댓글: Image Analyst 2021년 10월 2일
Hi
I need help with fitting automatically to ellipse. (
I have a photo of a spot from a camera. (added A=imread of the file in the matlab.mat file, can see the photo as imagesc(double(A)))
Each pixel has some kind of dimention (for example 150um , 150e-6)
How can i find the main axis of the ellipse in the photo? (need also to align it to pixel size so angle is a must)
Also, made fourier on it
Y=fftshift(fft2(double(A)))
and when looking at the fourier image, how can i do the same fit there around 0? (in the fourier we also have an angled shape).
*note that i need to have automatic finding of the result. not by hand as each photo will be different.

답변 (1개)

Image Analyst
Image Analyst 2021년 9월 29일
편집: Image Analyst 2021년 9월 29일
Try this. You might also want to take a look at bwferet().
% Demo by Image Analyst
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;
fontSize = 20;
markerSize = 40;
%--------------------------------------------------------------------------------------------------------
% READ IN IMAGE
fileName = 'matlab.mat';
s = load(fileName)
grayImage = s.A;
% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(grayImage)
if numberOfColorChannels > 1
% It's not really gray scale like we expected - it's color.
% Extract the red channel (so the magenta lines will be white).
grayImage = grayImage(:, :, 1);
end
%--------------------------------------------------------------------------------------------------------
% Display the image.
subplot(2, 2, 1);
imshow(grayImage, []);
impixelinfo;
axis('on', 'image');
title('Original Image', 'FontSize', fontSize, 'Interpreter', 'None');
hold on
drawnow;
grayImage(grayImage == 1) = 255;
lowThreshold = 3445;
highThreshold = inf;
%[lowThreshold, highThreshold] = threshold(lowThreshold, highThreshold, grayImage);
mask = grayImage >= lowThreshold & grayImage <= highThreshold;
% Display the image.
subplot(2, 2, 2);
imshow(mask, []);
impixelinfo;
axis('on', 'image');
title('Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Take largest blob.
mask = bwareafilt(mask, 1);
% Fill holes
mask = imfill(mask, 'holes');
% Display the image.
subplot(2, 2, 3);
imshow(mask, []);
impixelinfo;
axis('on', 'image');
title('Mask Image', 'FontSize', fontSize, 'Interpreter', 'None');
% Make measurements.
props = regionprops(mask, 'Centroid', 'Orientation', 'MajorAxisLength');
xCenter = props.Centroid(1);
yCenter = props.Centroid(2);
hold on;
plot(xCenter, yCenter, 'r+', 'LineWidth', 2);
% Find endpoints of line along major axis.
radius = props.MajorAxisLength / 2;
x1 = xCenter - radius * cosd(props.Orientation)
y1 = yCenter + radius * sind(props.Orientation)
x2 = xCenter + radius * cosd(props.Orientation)
y2 = yCenter - radius * sind(props.Orientation)
plot([x1, x2], [y1, y2], 'r-', 'lineWidth', 2)
  댓글 수: 3
elis02
elis02 2021년 10월 2일
편집: elis02 2021년 10월 2일
Hi, thanks. I'm on vacation without my PC so didn't try yet. However, you are doing this not on the Fourier but rather on the original photo. If make it on the Fourier, it will cancel some of the noise. According to what I see you used almost the same as I did. My question is what happens if you use a crop, will the angle be different? (It shouldn't be ofcourse but it is on my script -also use regionprop) .
Image Analyst
Image Analyst 2021년 10월 2일
It should work on the Fourer transform image also. Not sure how identifying the oval and drawing a line along the major axis would cancel some of the noise though. If you erased the transform outside the oval then inverse transformed, it would reduce high frequencies (which may be noise). To do that on the real part you'd do
ftReal(~mask) = 0; % Erase outside the mask on the real image part of the Fourier transform.

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by