如何在 MATLAB 中使用 imellipse 检测椭圆的面积
How to detect the area of the Ellipse using imellipse in MATLAB
如果有人能帮我解决这个问题,我将不胜感激。
最初是要加载到 MATLAB 的图像。图片必须包含椭圆形或圆形对象。我选择并在那里绘制 circle/ellipse 。
我已经完成了上述工作。我附上了 MATLAB 代码,对于图形,只需获取完整的月亮图像或椭圆形的鸡蛋。
现在我想计算那个椭圆的面积。有没有人帮我摆脱这种情况。
谢谢
这是代码
function varargout = stack_overflow(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @stack_overflow_OpeningFcn, ...
'gui_OutputFcn', @stack_overflow_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
%%
function stack_overflow_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%%
function varargout = stack_overflow_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%%
function load_image_Callback(hObject, eventdata, handles)
axes(handles.view);
global im
[path, user_cancel] = imgetfile();
if user_cancel
msgbox(sprintf('Error !!! \n Please upload the image'),'Error','Error');
return
end
im = imread(path);
imshow(im);
%%
function draw_circle_Callback(hObject, eventdata, handles)
axes(handles.view);
global temp;
global fcn;
temp = imellipse(gca, []);
fcn = makeConstrainToRectFcn('imellipse',get(gca,'XLim'),get(gca,'YLim'));
setPositionConstraintFcn(temp,fcn);
%%
function result_Callback(hObject, eventdata, handles)
%%
function result_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
可以使用imroi
class的createMask方法,用刚刚绘制的椭圆创建一个逻辑蒙版,然后将所有值为1(或0...) 以获得面积。您可以在 draw_circle_Callback
:
中添加类似的内容
您可以修改以适应您当前代码的简单示例:
%// Create dummy image with logical false values.
Im = false(500,500);
imshow(Im);
hold on
%// Draw ellipse
hEllipse = imellipse
%// Create a logical mask
roi = createMask(hEllipse);
%// Sum the values equal to 1;
Area = sum(roi(:))
如果有人能帮我解决这个问题,我将不胜感激。
最初是要加载到 MATLAB 的图像。图片必须包含椭圆形或圆形对象。我选择并在那里绘制 circle/ellipse 。
我已经完成了上述工作。我附上了 MATLAB 代码,对于图形,只需获取完整的月亮图像或椭圆形的鸡蛋。
现在我想计算那个椭圆的面积。有没有人帮我摆脱这种情况。
谢谢
这是代码
function varargout = stack_overflow(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @stack_overflow_OpeningFcn, ...
'gui_OutputFcn', @stack_overflow_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
%%
function stack_overflow_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%%
function varargout = stack_overflow_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%%
function load_image_Callback(hObject, eventdata, handles)
axes(handles.view);
global im
[path, user_cancel] = imgetfile();
if user_cancel
msgbox(sprintf('Error !!! \n Please upload the image'),'Error','Error');
return
end
im = imread(path);
imshow(im);
%%
function draw_circle_Callback(hObject, eventdata, handles)
axes(handles.view);
global temp;
global fcn;
temp = imellipse(gca, []);
fcn = makeConstrainToRectFcn('imellipse',get(gca,'XLim'),get(gca,'YLim'));
setPositionConstraintFcn(temp,fcn);
%%
function result_Callback(hObject, eventdata, handles)
%%
function result_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
可以使用imroi
class的createMask方法,用刚刚绘制的椭圆创建一个逻辑蒙版,然后将所有值为1(或0...) 以获得面积。您可以在 draw_circle_Callback
:
您可以修改以适应您当前代码的简单示例:
%// Create dummy image with logical false values.
Im = false(500,500);
imshow(Im);
hold on
%// Draw ellipse
hEllipse = imellipse
%// Create a logical mask
roi = createMask(hEllipse);
%// Sum the values equal to 1;
Area = sum(roi(:))