<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Esqueletização Archives - Visão Computacional</title>
	<atom:link href="https://visaocomputacional.com.br/tag/esqueletizacao/feed/" rel="self" type="application/rss+xml" />
	<link>https://visaocomputacional.com.br/tag/esqueletizacao/</link>
	<description>Tecnologias, teorias e testes.</description>
	<lastBuildDate>Thu, 28 Aug 2025 18:27:06 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://visaocomputacional.com.br/wp-content/uploads/2021/12/cropped-logo-150x150-1-32x32.png</url>
	<title>Esqueletização Archives - Visão Computacional</title>
	<link>https://visaocomputacional.com.br/tag/esqueletizacao/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Programando Esqueletização e Extração de Fronteiras Morfológica com Javascript</title>
		<link>https://visaocomputacional.com.br/programando-esqueletizacao-e-extracao-de-fronteiras-morfologica-com-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programando-esqueletizacao-e-extracao-de-fronteiras-morfologica-com-javascript</link>
		
		<dc:creator><![CDATA[Piemontez]]></dc:creator>
		<pubDate>Mon, 19 Jun 2023 17:50:53 +0000</pubDate>
				<category><![CDATA[Experimentos]]></category>
		<category><![CDATA[Esqueletização]]></category>
		<category><![CDATA[Fronteiras]]></category>
		<category><![CDATA[Morfologia]]></category>
		<guid isPermaLink="false">https://visaocomputacional.com.br/?p=4669</guid>

					<description><![CDATA[<p>Este artigo demonstra como programar a extração de fronteiras internas e externas, e esqueletização de imagens binárias apresentadas em Morfologia Matemática – Esqueletização de imagem e Morfologia Matemática – Extração de Fronteiras / Detecção de Bordas. A programação foi realizada na linguagem javascript, utilizando a biblioteca opencv.js e as imagens produzidas com a IDE OpenCV-Flow.</p>
<p>The post <a href="https://visaocomputacional.com.br/programando-esqueletizacao-e-extracao-de-fronteiras-morfologica-com-javascript/">Programando Esqueletização e Extração de Fronteiras Morfológica com Javascript</a> appeared first on <a href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="ratio ratio-16x9"><iframe title="Programando Extração de Fronteiras Morfológica com Javascript." width="800" height="450" src="https://www.youtube.com/embed/FLfueaozdHo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe></div>
</div></figure>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="ratio ratio-16x9"><iframe title="Programando Esqueletização Morfológica com Javascript." width="800" height="450" src="https://www.youtube.com/embed/tMaCqGAM8uI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe></div>
</div></figure>



<p>Este artigo demonstra como programar a extração de fronteiras internas e externas, e esqueletização de imagens binárias apresentadas em <a href="https://visaocomputacional.com.br/morfologia-matematica-esqueletizacao-de-imagem/">Morfologia Matemática – Esqueletização de imagem</a> e <a href="https://visaocomputacional.com.br/morfologia-matematica-extracao-de-fronteiras-deteccao-de-bordas/">Morfologia Matemática – Extração de Fronteiras / Detecção de Bordas</a>. A programação foi realizada na linguagem javascript, utilizando a biblioteca&nbsp;<a href="https://docs.opencv.org/4.x/d5/d10/tutorial_js_root.html">opencv.js</a>&nbsp;e as imagens produzidas com a IDE&nbsp;<a href="https://opencvflow.org/pt">OpenCV-Flow</a>.</p>



<h3 class="wp-block-heading">OpenCV</h3>



<p>A biblioteca opencv.js disponibiliza diversas funcionalidade prontas para o processamento de imagens e visão computacional. Para utilizá-la, basta incluí-la no script da página&nbsp;conforme descrito em&nbsp;<a href="https://docs.opencv.org/4.x/d0/d84/tutorial_js_usage.html">Using OpenCV.js</a>.</p>



<h2 class="wp-block-heading">Extração de Fronteira Interna</h2>



<p>A fronteira interna, como apresentado no outro post citado,&nbsp;é o contorno da imagem binarizada. O cálculo consiste em subtrair da imagem o resultado da erosão da própria imagem, por um elemento estruturante.</p>



<p>A primeira etapa que iremos realizar é criar o núcleo de operação com o formato de quadrado. O elemento estruturante deve ser uma imagem binarizada (preto e branco). Como não temos imagens binárias no OpenCV, criaremos uma imagem em tons de cinza.</p>



<p>Na função nucleoFormatoCruz abaixo, é criada uma matriz de tamanho 3×3, com um canal de cor do tipo uint8, com valores entre 0 e 255:</p>



<pre class="wp-block-preformatted">function nucleoFormatoCruz() {
  return new cv.matFromArray(3, 3, cv.CV_8UC1, [
    0, 1, 0,
    1, 1, 1,
    0, 1, 0
  ]);
}</pre>



<p>Com o núcleo criado, basta realiza a erosão da imagem binarizada e depois subtrair a imagem original pelo resultado desta operação. A função abaixo realiza este processo com a biblioteca OpenCV.js:</p>



<pre class="wp-block-preformatted">function extrairFronteiraInterna(imagem, imagemSaida, nucleo) {
  let imgTemporaria = new cv.Mat(imagem.rows, imagem.cols, imagem.type(), new cv.Scalar(0));

  // Realiza a erosão com biblioteca opencv.
  cv.erode(imagem, imgTemporaria, nucleo);
  
  // Realiza a subtração da imagem pela mesma erodida
  cv.subtract(imagem, imgTemporaria, imagemSaida);
}</pre>



<p>A primeira operação realizada com a função cv.erode, recebe uma imagem de entrada, uma imagem que receberá o resultado da operação de erosão e o núcleo para a operação. </p>



<p>A segunda e última operação realizada é a subtração com a função cv.subtract, que recebe uma imagem de entrada, uma segunda imagem com os valores das subtrações a serem realizadas, e por fim uma imagem de saída que receberá o resultado desta operação.</p>



<p>É possível simplificar esta função conforme abaixo:</p>



<pre class="wp-block-preformatted">function extrairFronteiraInterna(imagem, imagemSaida, nucleo) {
  // Realiza a erosão com biblioteca opencv.
  cv.erode(imagem, imagemSaida, nucleo);
  
  // Realiza a subtração da imagem pela mesma erodida
  cv.subtract(imagem, imagemSaida, imagemSaida);
}</pre>



<p>Note que, foi informada a variável imagemSaida como segundo e terceiro parâmetro, da segunda operação. Foi realizado isto, pois a variável imagemSaida contém o resultado da erosão, que é preciso para subtrair os valores e para não precisarmos criar uma terceira variável, simplificando a função. Não há problemas em utilizar a mesma variável na operação cv.subtract, pois ela é uma operação não convolucional, que realiza apenas operações que utilizam um único pixel de cada vez.</p>



<h2 class="wp-block-heading">Extração de Fronteiras Externas</h2>



<p>A fronteira externa, na imagem binarizada, cria uma camada como uma vestimenta que cobre toda a imagem. O cálculo consiste em dilatar a imagem por um elemento estruturante e subtrair pela imagem original. De certa forma, o inverso da operação para extração da fronteira interna.</p>



<p>A primeira etapa para realizar esta operação, também consiste em criar um núcleo para a operação de dilatação. Utilizaremos o mesmo da seção anterior. Com o núcleo criado basta realizar as operações conforme a função abaixo:</p>



<pre class="wp-block-preformatted">function extrairFronteiraExterna(imagem, imagemSaida, nucleo) {
  let imgTemporaria = new cv.Mat(imagem.rows, imagem.cols, imagem.type(), new cv.Scalar(0));

  // Realiza a erosão com biblioteca opencv.
  cv.dilate(imagem, imgTemporaria, nucleo);
  
  // Realiza a subtração da imagem pela mesma erodida
  cv.subtract(imgTemporaria, imagem, imagemSaida);
}</pre>



<p>Observe que para extração da fronteira externa, foi trocada a operação de erosão pela dilatação com a função cv.dilate, e alterada a ordem dos parâmetros durante a subtração com a função cv.subtract.</p>



<h2 class="wp-block-heading">Esqueletização de Imagem Binarizada </h2>



<p>Pare realizar a esqueletização com morfologia, conforme apresentado em <a href="https://visaocomputacional.com.br/morfologia-matematica-esqueletizacao-de-imagem/">Morfologia Matemática – Esqueletização de imagem</a>, basta realizar quatro operações, dentro de um laço de repetição, e realizar a inicialização de algumas variáveis para este processamento.</p>



<p>Observe na função abaixo, que nas primeiras linhas, antes do laço while, foram inicializados variáveis para o processamento da esqueletização, criando uma imagem temporária chamada clone, com as mesmas informações da imagem original e um núcleo que é utilizado para reduzir a estrutura da imagem original.</p>



<pre class="wp-block-preformatted">function extrairEsqueleto(imagem, imagemSaida) {
  // Inicializa as matrizes
  const erosao = new cv.Mat(imagem.rows, imagem.cols, src.type());
  const abertura = new cv.Mat(imagem.rows, imagem.cols, src.type());
  const subtracao = new cv.Mat(imagem.rows, imagem.cols, src.type());

  // Clona a imagem original
  let clone = imagem.clone();
  // Cria o núcleo(3x3) em formato de cruz
  const nucleo = cv.getStructuringElement(cv.MORPH_CROSS, new cv.Size(3, 3), new cv.Point(-1, -1));

<strong><strong>  while (cv.countNonZero(clone) !== 0) {
    cv.erode(clone, erosao, nucleo); 
    cv.dilate(erosao, abertura, nucleo);

    cv.subtract(clone, abertura, subtracao);

    cv.bitwise_or(imagemSaida, subtracao, imagemSaida);

    clone = </strong>erosao<strong>.clone();</strong>
    GCStore.add(<strong>clone</strong>);<strong>
  }
</strong></strong>
  // Deleta as variáveis temporárias
  delete erosao;
  delete abertura;
  delete subtracao;
  delete clone;
}</pre>



<p>Após a inicialização das variáveis, é realizado um laço que verifica se a imagem clone está vazia (só com valores zero), caso não esteja, o laço fica realizando as seguintes operações:</p>



<ul class="wp-block-list" id="block-7706de29-1bfa-4502-a250-c1d85e071358"><li>As duas primeiras operações realizadas, dentro do laço, consistem em realizar uma erosão, seguida de uma dilatação.<ul><li>Como resultado é criado uma abertura da imagem, pelo elemento estruturante em formato cruz;</li><li>Esta abertura remove os pontos das extremidades da imagem clone.</li></ul></li><li>A terceiraça operação, realiza a subtração da imagem clone pela imagem de abertura.<ul><li>Como resultado, na matriz subtração, estão apenas os pontos com as extremidades da imagem clone.</li></ul></li><li>Por fim, os pontos da extremidades, são salvos na imagem de saída.</li></ul>



<p>O processo é repetido até que a imagem clone seja zerada, durante o processo de erosão.</p>



<p>Note que, em cada laço realizado, é coletado os pontos da extremidades da imagem clone e salvo na imagem de saída, e em cada laço a imagem é diminuída de tamanho. Este processo resulta na criação do esqueleto da imagem.</p>



<h2 class="wp-block-heading">Cuidados</h2>



<p>Caso você vá utilizar a biblioteca opencv, saiba que as funções morfológicas dela também realizam morfologia matemática em imagens em tons de cinza e coloridas, que possuem resultados muito diferentes das operações morfológicas em imagens binarizadas. Lembre-se de converter a imagem em preto e branco, para realizar os experimentos aqui apresentados.</p>



<h2 class="wp-block-heading">Considerações</h2>



<p>As funções programadas neste post possuem caráter de estudo, afim de entender as etapas e os processos morfológicos, pois não foram pensadas em questões como desempenho nestes exemplos. Caso você precise utilizar este tipo de operação, é recomendado que utilize uma biblioteca preparada para isso, como o OpenCV ou similar.</p>



<p>O código aqui apresentado esta disponível no link abaixo:</p>



<p>Source code:&nbsp;<a href="https://github.com/visaocomputacionalexemplos/morfologia/blob/main/javascript/base/morfologia.html">https://github.com/visaocomputacionalexemplos/morfologia/blob/main/javascript/base/esqueletizacao.html</a></p>
<p>The post <a href="https://visaocomputacional.com.br/programando-esqueletizacao-e-extracao-de-fronteiras-morfologica-com-javascript/">Programando Esqueletização e Extração de Fronteiras Morfológica com Javascript</a> appeared first on <a href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Morfologia Matemática &#8211; Esqueletização de imagem</title>
		<link>https://visaocomputacional.com.br/morfologia-matematica-esqueletizacao-de-imagem/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=morfologia-matematica-esqueletizacao-de-imagem</link>
		
		<dc:creator><![CDATA[Piemontez]]></dc:creator>
		<pubDate>Thu, 18 May 2023 16:48:59 +0000</pubDate>
				<category><![CDATA[Sem Categoria]]></category>
		<category><![CDATA[Dilatação]]></category>
		<category><![CDATA[Dilate]]></category>
		<category><![CDATA[Erode]]></category>
		<category><![CDATA[Erosão]]></category>
		<category><![CDATA[Esqueletização]]></category>
		<category><![CDATA[Morfologia]]></category>
		<guid isPermaLink="false">https://visaocomputacional.com.br/?p=4294</guid>

					<description><![CDATA[<p>Uma abordagem importante, para representação da forma de um objeto, é transformá-la em uma estrutura mais simples, chamada de esqueleto.</p>
<p>The post <a href="https://visaocomputacional.com.br/morfologia-matematica-esqueletizacao-de-imagem/">Morfologia Matemática &#8211; Esqueletização de imagem</a> appeared first on <a href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Uma abordagem importante, para representação da forma de um objeto, é transformá-la em uma estrutura mais simples, chamada de esqueleto. O esqueleto de um objeto pode ser obtido por meio de diversas técnicas, como transformada de distância, afinamento de objetos entre outras.</p>



<p>Neste artigo, será apresentado como utilizar a morfologia para extração do esqueleto de uma imagem binarizada. Acesse <a href="https://visaocomputacional.com.br/morfologia-matematica-para-processamento-de-imagens/">Morfologia Matemática para Processamento de Imagens</a>, para entender sobre erosão e dilatação, operações que são a base dos cálculos apresentados a seguir.</p>



<h3 class="wp-block-heading">Transformada do eixo-médio</h3>



<p>A transformada do eixo-médio, proposto por Blum (1967), determina o conjunto de pontos que estão mais próximos da borda do objeto. De uma maneira formal, o eixo médio de um objeto é composto pelos centros das maiores circunferências que cabem no objeto. A figura 1 ilustra essa definição para um retângulo <a href="#refs">[PS]</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-11.png" alt="" class="wp-image-4356" width="527" height="243" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-11.png 480w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-11-300x138.png 300w" sizes="(max-width: 527px) 100vw, 527px" /><figcaption>Fig 1- Esqueleto de um retângulo definido a partir da transformada do eixo-médio <a href="#refs">[RSA]</a>.</figcaption></figure></div>



<p>Embora a transformada do eixo médio resulte em um esqueleto aceitável. Sua utilização na prática resulta em um problema em termos computacionais. Tal implementação envolve o cálculo da distância entre cada ponto interior e da borda do objeto. Diversos algoritmos foram propostos para tentar melhorar a eficiência desta transformada <a href="#refs">[PS]</a>. </p>



<p>Outros exemplos de objetos e seu esqueletos são demonstrados na figura 2. Pode-se observar, nas duas primeiras imagens, que objetos e formas diferentes podem ter o mesmo esqueleto. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="840" height="703" src="https://visaocomputacional.com.br/wp-content/uploads/2023/04/image-8.png" alt="" class="wp-image-4295" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/04/image-8.png 840w, https://visaocomputacional.com.br/wp-content/uploads/2023/04/image-8-300x251.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/04/image-8-768x643.png 768w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption>Fig 2 &#8211; Ilustração de esqueleto de formas geométricas.</figcaption></figure>



<h3 class="wp-block-heading">Transformada de distância</h3>



<p>A transformada de distância corresponde ao mapa resultante da distância entre cada ponto interior do objeto e de sua borda mais próxima <a href="#refs">[PS]</a>. Essa transformação depende do tipo de cálculo de distância utilizado.</p>



<p>Um exemplo do processo da transformada de distância é ilustrado na figura 3, o esqueleto do objeto, formado pelos valores mais altos de distância, corresponde às regiões mais claras. O cálculo de distância utilizado é a distância euclidiana.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="253" height="373" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-12.png" alt="" class="wp-image-4368" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-12.png 253w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-12-203x300.png 203w" sizes="auto, (max-width: 253px) 100vw, 253px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="253" height="373" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-13.png" alt="" class="wp-image-4369" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-13.png 253w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-13-203x300.png 203w" sizes="auto, (max-width: 253px) 100vw, 253px" /><figcaption>Fig 3 &#8211; Transformada de distância. </figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="253" height="373" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-14.png" alt="" class="wp-image-4370" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-14.png 253w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-14-203x300.png 203w" sizes="auto, (max-width: 253px) 100vw, 253px" /></figure>
</div>
</div>



<p>Na figura 4, é ilustrada uma imagem binária, sua representação da transformada euclidiana e seu esqueleto criado, a partir dos valores mais altos (pontos claros).</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-15-1024x161.png" alt="" class="wp-image-4373" width="840" height="132" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-15-1024x161.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-15-300x47.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-15-768x121.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-15.png 1096w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption>Fig 4 &#8211; Ilustração de transformada de distância <a href="#refs">[LQ]</a>.</figcaption></figure>



<h3 class="wp-block-heading">Processo de esqueletização com morfologia matemática</h3>



<p>A esqueletização de uma imagem binarizada por morfologia, apresentada a seguir, tem como base a transformada de distância. Todo o processo é bem simples, com apenas duas operações morfológicas e uma subtração, encadeadas em um laço é possível extrair o esqueleto.</p>



<p>Observe a imagem binarizada A e o elemento estruturante B, logo abaixo. Nas linhas seguintes, observe que:</p>



<ul class="wp-block-list"><li>A primeira coluna apresenta a erosão por B da imagem da linha anterior;</li><li>A segunda coluna apresenta a dilatação da imagem da primeira coluna por B. A segunda coluna, também, corresponde a abertura da imagem da primeira coluna da linha anterior;</li><li>A terceira coluna apresenta a subtração da primeira coluna da linha anterior pela segunda.</li></ul>



<p>Por fim, na última linha, a imagem da terceira coluna de título &#8220;Resultado&#8221; apresentada a soma de todas as imagens da terceira coluna. Observe que essa somatória resultou no esqueleto da imagem retangular A.</p>



<div class="wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image.png" alt="" class="wp-image-4333"/><figcaption><strong>A</strong><br>Imagem binarizada</figcaption></figure>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="82" height="83" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-9.png" alt="" class="wp-image-4348"/><figcaption><strong>B</strong><br>Elemento estruturante</figcaption></figure></div>
</div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow"></div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-center"><strong>Erosão por B</strong><br></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-1.png" alt="" class="wp-image-4334"/><figcaption><strong>A ⊖ B</strong><br>Erosão de A por B</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-center"><strong>Dilatação da 1ª coluna por B</strong><br></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-3.png" alt="" class="wp-image-4337"/><figcaption><strong>A ◦ B</strong><br>= (A ⊖ B) ⊕ B<br>Abertura de A por B</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p class="has-text-align-center"><strong>Subtração da 1ª coluna da linha anterior pela 2ª coluna</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-4.png" alt="" class="wp-image-4338"/><figcaption><strong>A &#8211; (A ◦ B)</strong><br>A subtraída pela abertura de A por B</figcaption></figure>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-2.png" alt="" class="wp-image-4336"/><figcaption><strong>A ⊖ B ⊖ B</strong><br>Erosão de A por B duas vezes</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="278" height="182" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-16.png" alt="" class="wp-image-4377"/><figcaption><strong>(A ⊖ B) ◦ B</strong><br>= (A ⊖ B) ⊖ B ⊕ B<br>Erosão de A por B, seguida da abertura por B</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-6.png" alt="" class="wp-image-4341"/><figcaption><strong>A &#8211; ((A ⊖ B) ◦ B</strong>)<br>Abertura de A por B <br>subtraída pela Erosão de A por B</figcaption></figure>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-7.png" alt="" class="wp-image-4343"/><figcaption><strong>A ⊖ B ⊖ B ⊖ B</strong><br>Erosão de A por B três vezes</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-7.png" alt="" class="wp-image-4343"/><figcaption><strong>(A ⊖ B ⊖ B) ◦ B</strong><br>Erosão de A por B duas vezes, seguida da abertura por B</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-2.png" alt="" class="wp-image-4336"/><figcaption><strong>A &#8211; ((A ⊖ B ⊖ B) ◦ B)</strong><br>Abertura de A por B <br>subtraída pela Erosão de A por B</figcaption></figure>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="250" height="178" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/image-8.png" alt="" class="wp-image-4345"/><figcaption>Resultado</figcaption></figure>
</div>
</div>



<h3 class="wp-block-heading">Exemplos</h3>



<p>A seguir, duas demonstrações de esqueletização, da palavra &#8220;OpenCV&#8221; e de uma imagem da digital de um dedo. O processo de extração do esqueleto da Figura 8 é carregar a imagem, suavizar a imagem com o filtro gaussiano, converter em tons de cinza, limiarizar/binarizar a imagem e extrair o esqueleto.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/opencv-300x100-1.png" alt="" class="wp-image-4399" width="426" height="142"/><figcaption>Fig 6 &#8211; Texto &#8221; OpenCV&#8221; para extração do esqueleto <a href="#refs">[FA]</a>. </figcaption></figure></div>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="341" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/skel_opencv-1024x341.png" alt="" class="wp-image-4400" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/skel_opencv-1024x341.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/skel_opencv-300x100.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/skel_opencv-768x256.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/skel_opencv.png 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption> Fig 7 &#8211; Esqueleto da palavra &#8220;OpenCV&#8221; <a href="#refs">[FA]</a>. </figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="460" src="https://visaocomputacional.com.br/wp-content/uploads/2023/05/digital-1024x460.png" alt="" class="wp-image-4401" srcset="https://visaocomputacional.com.br/wp-content/uploads/2023/05/digital-1024x460.png 1024w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/digital-300x135.png 300w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/digital-768x345.png 768w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/digital-1536x691.png 1536w, https://visaocomputacional.com.br/wp-content/uploads/2023/05/digital.png 1706w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Fig 8 &#8211; Extração do esqueleto da impressão digital, utilizando morfologia matemática com a ferramenta <a href="https://opencvflow.org/en">OpenCV-Flow</a>.</figcaption></figure>



<p id="refs"><strong>Referências</strong></p>



<p>[PS] Pedrini, H.; Schwartz, W. R.; Análise de Imagens Digitais: Princípios, Algoritmos e Aplicações. Thomson Learning, 2007</p>



<p>[LQ] Li, Quannan et al. “Skeleton Extraction Using SSM of the Distance Transform.” (2008).</p>



<p>[RSA] R. Fisher, S. Perkins, A. Walker and E. Wolfart. Skeletonization/Medial Axis Transform. <a href="https://homepages.inf.ed.ac.uk/rbf/HIPR2/skeleton.htm">Acessado em 01/05/2023</a></p>



<p>[FA] Félix Abecassis &#8211; OpenCV &#8211; Morphological Skeleton. <a href="https://felix.abecassis.me/2011/09/opencv-morphological-skeleton/">Acessado em 02/05/2023</a></p>
<p>The post <a href="https://visaocomputacional.com.br/morfologia-matematica-esqueletizacao-de-imagem/">Morfologia Matemática &#8211; Esqueletização de imagem</a> appeared first on <a href="https://visaocomputacional.com.br">Visão Computacional</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
