Если у меня есть произвольная форма (приложенная по-настоящему простая макета), как бы я оценил площадь закрытой поверхности в Matlab. Чтобы получить некоторые случайные точки вдоль кривой, я использовал команду ginput, чтобы получить приблизительную оценку кривой с неравным расстоянием между точками. Я хочу получить оценку области, но я считаю, что команда trapz переоценивает область из-за перекрытия (пожалуйста, поправьте меня, если я ошибаюсь здесь). Есть ли более точный способ получить эту область?Расчет площади Matlab
ответ
Ну, вы на самом деле не дают достаточно информации, чтобы решить эту проблему полностью, но вот один подход можно предпринять, чтобы автоматически найти границу для того, чтобы рассчитать площадь:
% Get image and convert to logical mask
img = ~im2bw(imread('polyarea.jpg'));
% Fill the hole
img = imfill(img,'holes');
% Get boundary
b = bwboundaries(img);
% Approximate area of boundary
area = polyarea(b{1}(:,1), b{1}(:,2));
% Print area
disp(['Area: ' num2str(area)]);
imshow(img);
hold on;
plot(b{1}(:,2),b{1}(:,1),'go');
Идея заключается в том, что у вас есть вход, вы формируете логическую маску, получаете границу маски, а затем можете приблизить область, заключенную границей, с помощью polyarea
.
Выход:
Area: 228003
Кроме того, вы можете также использовать regionprops(img,'Area')
, который выводит:
ans =
Area: 229154
Спасибо за внимание и время. Будет ли такой же процесс применяться к открытой кривой? Например, если у моего тестового изображения не было «базы» (только кривая), я мог бы применить опцию imfill? Не могли бы вы сказать, какой из этих методов обеспечит более точное решение? – Cyrus
@ Cyrus вы можете разместить дополнительное изображение в вопросе? – Justin
Я просто имел в виду, если база первого изображения недоступна. Я добавил 2-е изображение с удаленной базой. – Cyrus
Как создать форму? – NKN
Какие у вас данные? 'trapz' также может использоваться с хорошей точностью. – NKN
@NKN Я просто создал случайный рисунок в качестве примера. Разве это не задержит заоблачно? – Cyrus