Escolar Documentos
Profissional Documentos
Cultura Documentos
D. R. V.
Menu
Minicursos
Voltar
Voltar
Estação meteorológica
Artigos
Sobre o Danilo
Voltar
Quem é?
Portfólio
Currículo Lattes
Conteúdo
Começando…
Falta algo…
Agora vamos trabalhar
Finalmente as áreas
Apresentação dos dados
Observações
Comentários e dúvidas dos visitantes
Começando…
Primeiro você precisa de uma foto das folhas e tem que haver uma escala na foto, senão não serve. Eu tenho aqui a foto de folhas de Laguncularia sp. e a escala é o papel milimetrado no fundo.
folhas = imread('original.jpg');
imshow(folhas);
Falta algo…
Não dá para obter a área do jeito que a foto está, ele deve estar em preto e branco (só preto e branco, não confunda com escala de cinza) e com o mínimo possível de elementos a mais. Dá para
fazer tudo isso direto no MATLAB, mas eu tenho PhotoShop e preguiça, então editei lá mesmo.
https://www.danilorvieira.com/secoes/artigos/4/ 1/3
24/04/2018 Cálculo da área de folhas com MATLAB
esta está certa e eu já marquei um quadrado com 1cm de lado que será minha referência.
Ainda assim, o MATLAB abre a foto como uma matriz tridimensional (largura, altura e canal RGB), mas as funções que usaremos a seguir trabalham com preto e branco puro.
[B,L] = bwboundaries(bw);
Eu quero que cada folha apareça de uma cor, então escolhi o colormap jet e especifiquei que ele deve ser distribuido pelos objetos encontrados pela função bwboundaries (repare que o L aparece aí
de novo).
Agora basta plotar os contornos das folhas, um de cada vez. Repare que aqui usamos o B que a bwboundaries nos deu, ele representa o limite de cada objeto encontrado. Repare que B é um array de
cell, então acessa-se o conteúdo de seus elementos com chaves e não com parênteses.
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'black', 'LineWidth', 2)
end
Finalmente as áreas
Um comando e pronto…
stats = regionprops(L,'Area');
for k = 1:length(B)
% obtem (X,Y) do contorno k
boundary = B{k};
% A área do contorno k
area = stats(k).Area;
% o resto é óbvio, né?
area_string = sprintf('%.0f',area);
text(boundary(1,2)+5,boundary(1,1)+13,area_string,...
https://www.danilorvieira.com/secoes/artigos/4/ 2/3
24/04/2018 Cálculo da área de folhas com MATLAB
'Color','white',...
'FontSize',8,...
'FontWeight','bold',...
'BackgroundColor','black',...
'FontName','Times');
end
hold off
Observações
O mais importante é destacar que a área está em pixels, e, para converter de pixels para centímetros quadrados, basta usar a área em pixels da referência (no meu caso, 441). Como a minha
referência era um quadrado de um centímetro de lado, eu apenas dividi todos os valores em pixels por 441 e obtive áreas em centímetros quadrados.
Você pode reparar que o MATLAB obteve as áreas dos buracos também, mas você não precisa se preocupar com elas, a área da folha que aparece já desconta os buracos.
© 2011–2018
https://www.danilorvieira.com/secoes/artigos/4/ 3/3