Serveur d'exploration sur l'OCR

Attention, ce site est en cours de développement !
Attention, site généré par des moyens informatiques à partir de corpus bruts.
Les informations ne sont donc pas validées.

Fast Contour-Tracing Algorithm Based on a Pixel-Following Method for Image Sensors

Identifieur interne : 000005 ( Pmc/Checkpoint ); précédent : 000004; suivant : 000006

Fast Contour-Tracing Algorithm Based on a Pixel-Following Method for Image Sensors

Auteurs : Jonghoon Seo ; Seungho Chae ; Jinwook Shim ; Dongchul Kim ; Cheolho Cheong ; Tack-Don Han

Source :

RBID : PMC:4813928

Abstract

Contour pixels distinguish objects from the background. Tracing and extracting contour pixels are widely used for smart/wearable image sensor devices, because these are simple and useful for detecting objects. In this paper, we present a novel contour-tracing algorithm for fast and accurate contour following. The proposed algorithm classifies the type of contour pixel, based on its local pattern. Then, it traces the next contour using the previous pixel’s type. Therefore, it can classify the type of contour pixels as a straight line, inner corner, outer corner and inner-outer corner, and it can extract pixels of a specific contour type. Moreover, it can trace contour pixels rapidly because it can determine the local minimal path using the contour case. In addition, the proposed algorithm is capable of the compressing data of contour pixels using the representative points and inner-outer corner points, and it can accurately restore the contour image from the data. To compare the performance of the proposed algorithm to that of conventional techniques, we measure their processing time and accuracy. In the experimental results, the proposed algorithm shows better performance compared to the others. Furthermore, it can provide the compressed data of contour pixels and restore them accurately, including the inner-outer corner, which cannot be restored using conventional algorithms.


Url:
DOI: 10.3390/s16030353
PubMed: 27005632
PubMed Central: 4813928


Affiliations:


Links toward previous steps (curation, corpus...)


Links to Exploration step

PMC:4813928

Le document en format XML

<record>
<TEI>
<teiHeader>
<fileDesc>
<titleStmt>
<title xml:lang="en">Fast Contour-Tracing Algorithm Based on a Pixel-Following Method for Image Sensors</title>
<author>
<name sortKey="Seo, Jonghoon" sort="Seo, Jonghoon" uniqKey="Seo J" first="Jonghoon" last="Seo">Jonghoon Seo</name>
<affiliation>
<nlm:aff id="af1-sensors-16-00353">Software Platform R&D Lab., LG Electronics Advanced Research Institute, 19 Yangjae-daero 11-gil, Seocho-gu, Seoul, 06772, Korea;
<email>jonghoon.seo@lge.com</email>
</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Chae, Seungho" sort="Chae, Seungho" uniqKey="Chae S" first="Seungho" last="Chae">Seungho Chae</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Shim, Jinwook" sort="Shim, Jinwook" uniqKey="Shim J" first="Jinwook" last="Shim">Jinwook Shim</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Kim, Dongchul" sort="Kim, Dongchul" uniqKey="Kim D" first="Dongchul" last="Kim">Dongchul Kim</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Cheong, Cheolho" sort="Cheong, Cheolho" uniqKey="Cheong C" first="Cheolho" last="Cheong">Cheolho Cheong</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Han, Tack Don" sort="Han, Tack Don" uniqKey="Han T" first="Tack-Don" last="Han">Tack-Don Han</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
</titleStmt>
<publicationStmt>
<idno type="wicri:source">PMC</idno>
<idno type="pmid">27005632</idno>
<idno type="pmc">4813928</idno>
<idno type="url">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4813928</idno>
<idno type="RBID">PMC:4813928</idno>
<idno type="doi">10.3390/s16030353</idno>
<date when="2016">2016</date>
<idno type="wicri:Area/Pmc/Corpus">000029</idno>
<idno type="wicri:Area/Pmc/Curation">000029</idno>
<idno type="wicri:Area/Pmc/Checkpoint">000005</idno>
</publicationStmt>
<sourceDesc>
<biblStruct>
<analytic>
<title xml:lang="en" level="a" type="main">Fast Contour-Tracing Algorithm Based on a Pixel-Following Method for Image Sensors</title>
<author>
<name sortKey="Seo, Jonghoon" sort="Seo, Jonghoon" uniqKey="Seo J" first="Jonghoon" last="Seo">Jonghoon Seo</name>
<affiliation>
<nlm:aff id="af1-sensors-16-00353">Software Platform R&D Lab., LG Electronics Advanced Research Institute, 19 Yangjae-daero 11-gil, Seocho-gu, Seoul, 06772, Korea;
<email>jonghoon.seo@lge.com</email>
</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Chae, Seungho" sort="Chae, Seungho" uniqKey="Chae S" first="Seungho" last="Chae">Seungho Chae</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Shim, Jinwook" sort="Shim, Jinwook" uniqKey="Shim J" first="Jinwook" last="Shim">Jinwook Shim</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Kim, Dongchul" sort="Kim, Dongchul" uniqKey="Kim D" first="Dongchul" last="Kim">Dongchul Kim</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Cheong, Cheolho" sort="Cheong, Cheolho" uniqKey="Cheong C" first="Cheolho" last="Cheong">Cheolho Cheong</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Han, Tack Don" sort="Han, Tack Don" uniqKey="Han T" first="Tack-Don" last="Han">Tack-Don Han</name>
<affiliation>
<nlm:aff id="af2-sensors-16-00353">Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</nlm:aff>
</affiliation>
</author>
</analytic>
<series>
<title level="j">Sensors (Basel, Switzerland)</title>
<idno type="eISSN">1424-8220</idno>
<imprint>
<date when="2016">2016</date>
</imprint>
</series>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc>
<textClass></textClass>
</profileDesc>
</teiHeader>
<front>
<div type="abstract" xml:lang="en">
<p>Contour pixels distinguish objects from the background. Tracing and extracting contour pixels are widely used for smart/wearable image sensor devices, because these are simple and useful for detecting objects. In this paper, we present a novel contour-tracing algorithm for fast and accurate contour following. The proposed algorithm classifies the type of contour pixel, based on its local pattern. Then, it traces the next contour using the previous pixel’s type. Therefore, it can classify the type of contour pixels as a straight line, inner corner, outer corner and inner-outer corner, and it can extract pixels of a specific contour type. Moreover, it can trace contour pixels rapidly because it can determine the local minimal path using the contour case. In addition, the proposed algorithm is capable of the compressing data of contour pixels using the representative points and inner-outer corner points, and it can accurately restore the contour image from the data. To compare the performance of the proposed algorithm to that of conventional techniques, we measure their processing time and accuracy. In the experimental results, the proposed algorithm shows better performance compared to the others. Furthermore, it can provide the compressed data of contour pixels and restore them accurately, including the inner-outer corner, which cannot be restored using conventional algorithms.</p>
</div>
</front>
<back>
<div1 type="bibliography">
<listBibl>
<biblStruct>
<analytic>
<author>
<name sortKey="Mcqueen, W A" uniqKey="Mcqueen W">W.A. Mcqueen</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Pratt, W" uniqKey="Pratt W">W. Pratt</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Gose, E" uniqKey="Gose E">E. Gose</name>
</author>
<author>
<name sortKey="Johnsonbaugh, R" uniqKey="Johnsonbaugh R">R. Johnsonbaugh</name>
</author>
<author>
<name sortKey="Jost, S" uniqKey="Jost S">S. Jost</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Pitas, I" uniqKey="Pitas I">I. Pitas</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Das, M" uniqKey="Das M">M. Das</name>
</author>
<author>
<name sortKey="Paulik, M" uniqKey="Paulik M">M. Paulik</name>
</author>
<author>
<name sortKey="Loh, N" uniqKey="Loh N">N. Loh</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Papert, S" uniqKey="Papert S">S. Papert</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cheong, C" uniqKey="Cheong C">C. Cheong</name>
</author>
<author>
<name sortKey="Han, T D" uniqKey="Han T">T.D. Han</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Pavlidis, T" uniqKey="Pavlidis T">T. Pavlidis</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Reddy, P R" uniqKey="Reddy P">P.R. Reddy</name>
</author>
<author>
<name sortKey="Amarnadh, V" uniqKey="Amarnadh V">V. Amarnadh</name>
</author>
<author>
<name sortKey="Bhaskar, M" uniqKey="Bhaskar M">M. Bhaskar</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Aroca, R V" uniqKey="Aroca R">R.V. Aroca</name>
</author>
<author>
<name sortKey="Gomes, R B" uniqKey="Gomes R">R.B. Gomes</name>
</author>
<author>
<name sortKey="Dantas, R R" uniqKey="Dantas R">R.R. Dantas</name>
</author>
<author>
<name sortKey="Calbo, A G" uniqKey="Calbo A">A.G. Calbo</name>
</author>
<author>
<name sortKey="Goncalves, L M G" uniqKey="Goncalves L">L.M.G. Gonçalves</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Wakaumi, H" uniqKey="Wakaumi H">H. Wakaumi</name>
</author>
<author>
<name sortKey="Nagasawa, C" uniqKey="Nagasawa C">C. Nagasawa</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Brodi, D" uniqKey="Brodi D">D. Brodić</name>
</author>
<author>
<name sortKey="Milivojevi, D R" uniqKey="Milivojevi D">D.R. Milivojević</name>
</author>
<author>
<name sortKey="Milivojevi, Z" uniqKey="Milivojevi Z">Z. Milivojević</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Kim, J H" uniqKey="Kim J">J.H. Kim</name>
</author>
<author>
<name sortKey="Seo, K S" uniqKey="Seo K">K.S. Seo</name>
</author>
<author>
<name sortKey="Wang, J" uniqKey="Wang J">J. Wang</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Tian, Y" uniqKey="Tian Y">Y. Tian</name>
</author>
<author>
<name sortKey="Guan, T" uniqKey="Guan T">T. Guan</name>
</author>
<author>
<name sortKey="Wang, C" uniqKey="Wang C">C. Wang</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Zhang, S" uniqKey="Zhang S">S. Zhang</name>
</author>
<author>
<name sortKey="Zhao, X" uniqKey="Zhao X">X. Zhao</name>
</author>
<author>
<name sortKey="Lei, B" uniqKey="Lei B">B. Lei</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cheong, C" uniqKey="Cheong C">C. Cheong</name>
</author>
<author>
<name sortKey="Seo, J" uniqKey="Seo J">J. Seo</name>
</author>
<author>
<name sortKey="Han, T D" uniqKey="Han T">T.D. Han</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Miyatake, T" uniqKey="Miyatake T">T. Miyatake</name>
</author>
<author>
<name sortKey="Matsushima, H" uniqKey="Matsushima H">H. Matsushima</name>
</author>
<author>
<name sortKey="Ejiri, M" uniqKey="Ejiri M">M. Ejiri</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Danielsson, P E" uniqKey="Danielsson P">P.E. Danielsson</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Shoji, K" uniqKey="Shoji K">K. Shoji</name>
</author>
<author>
<name sortKey="Miyamichi, J" uniqKey="Miyamichi J">J. Miyamichi</name>
</author>
<author>
<name sortKey="Hirano, K" uniqKey="Hirano K">K. Hirano</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Toussaint, G" uniqKey="Toussaint G">G. Toussaint</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Suzuki, S" uniqKey="Suzuki S">S. Suzuki</name>
</author>
<author>
<name sortKey="Abe, K" uniqKey="Abe K">K. Abe</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Ghuneim, A" uniqKey="Ghuneim A">A. Ghuneim</name>
</author>
</analytic>
</biblStruct>
</listBibl>
</div1>
</back>
</TEI>
<pmc article-type="research-article">
<pmc-dir>properties open_access</pmc-dir>
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors (Basel)</journal-id>
<journal-id journal-id-type="iso-abbrev">Sensors (Basel)</journal-id>
<journal-id journal-id-type="publisher-id">sensors</journal-id>
<journal-title-group>
<journal-title>Sensors (Basel, Switzerland)</journal-title>
</journal-title-group>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>MDPI</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="pmid">27005632</article-id>
<article-id pub-id-type="pmc">4813928</article-id>
<article-id pub-id-type="doi">10.3390/s16030353</article-id>
<article-id pub-id-type="publisher-id">sensors-16-00353</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Fast Contour-Tracing Algorithm Based on a Pixel-Following Method for Image Sensors</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Seo</surname>
<given-names>Jonghoon</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-16-00353">1</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Chae</surname>
<given-names>Seungho</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-16-00353">2</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Shim</surname>
<given-names>Jinwook</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-16-00353">2</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Kim</surname>
<given-names>Dongchul</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-16-00353">2</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Cheong</surname>
<given-names>Cheolho</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-16-00353">2</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Han</surname>
<given-names>Tack-Don</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-16-00353">2</xref>
<xref rid="c1-sensors-16-00353" ref-type="corresp">*</xref>
</contrib>
</contrib-group>
<contrib-group>
<contrib contrib-type="editor">
<name>
<surname>Passaro</surname>
<given-names>Vittorio M. N.</given-names>
</name>
<role>Academic Editor</role>
</contrib>
</contrib-group>
<aff id="af1-sensors-16-00353">
<label>1</label>
Software Platform R&D Lab., LG Electronics Advanced Research Institute, 19 Yangjae-daero 11-gil, Seocho-gu, Seoul, 06772, Korea;
<email>jonghoon.seo@lge.com</email>
</aff>
<aff id="af2-sensors-16-00353">
<label>2</label>
Department of Computer Science, Yonsei University, 50 Yonsei-ro Seodaemun-gu, Seoul, 03722, Korea;
<email>seungho.chae@msl.yonsei.ac.kr</email>
(S.C.);
<email>jin99foryou@msl.yonsei.ac.kr</email>
(J.S.);
<email>dckim@msl.yonsei.ac.kr</email>
(D.K.);
<email>balgeum00@msl.yonsei.ac.kr</email>
(C.C.)</aff>
<author-notes>
<corresp id="c1-sensors-16-00353">
<label>*</label>
Correspondence:
<email>hantack55@gmail.com</email>
; Tel.: +82-2-2123-2715; Fax: +82-2-365-2579</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>09</day>
<month>3</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="collection">
<month>3</month>
<year>2016</year>
</pub-date>
<volume>16</volume>
<issue>3</issue>
<elocation-id>353</elocation-id>
<history>
<date date-type="received">
<day>20</day>
<month>12</month>
<year>2015</year>
</date>
<date date-type="accepted">
<day>29</day>
<month>2</month>
<year>2016</year>
</date>
</history>
<permissions>
<copyright-statement>© 2016 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2016</copyright-year>
<license>
<license-p>
<pmc-comment>CREATIVE COMMONS</pmc-comment>
This article is an open access article distributed under the terms and conditions of the Creative Commons by Attribution (CC-BY) license (
<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</ext-link>
).</license-p>
</license>
</permissions>
<abstract>
<p>Contour pixels distinguish objects from the background. Tracing and extracting contour pixels are widely used for smart/wearable image sensor devices, because these are simple and useful for detecting objects. In this paper, we present a novel contour-tracing algorithm for fast and accurate contour following. The proposed algorithm classifies the type of contour pixel, based on its local pattern. Then, it traces the next contour using the previous pixel’s type. Therefore, it can classify the type of contour pixels as a straight line, inner corner, outer corner and inner-outer corner, and it can extract pixels of a specific contour type. Moreover, it can trace contour pixels rapidly because it can determine the local minimal path using the contour case. In addition, the proposed algorithm is capable of the compressing data of contour pixels using the representative points and inner-outer corner points, and it can accurately restore the contour image from the data. To compare the performance of the proposed algorithm to that of conventional techniques, we measure their processing time and accuracy. In the experimental results, the proposed algorithm shows better performance compared to the others. Furthermore, it can provide the compressed data of contour pixels and restore them accurately, including the inner-outer corner, which cannot be restored using conventional algorithms.</p>
</abstract>
<kwd-group>
<kwd>contour tracing</kwd>
<kwd>boundary following</kwd>
<kwd>pixel following</kwd>
<kwd>contour data compression</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="sec1-sensors-16-00353">
<title>1. Introduction</title>
<p>A contour is defined as a segment that is one pixel wide and one or more pixels in length, and a boundary is defined as an unbroken contour [
<xref rid="B1-sensors-16-00353" ref-type="bibr">1</xref>
]. Contours and boundaries provide very important information for object representation and image recognition. For example, they are used to separate objects from their backgrounds, to calculate the sizes of objects, to classify shapes and to find the feature points of objects using the length and shape of their contour pixels [
<xref rid="B2-sensors-16-00353" ref-type="bibr">2</xref>
,
<xref rid="B3-sensors-16-00353" ref-type="bibr">3</xref>
]. Moreover, in the field of graphics and vision, it is possible to use the contour information to save the shape of objects and restore them to their original shapes for various applications. Therefore, there have been many studies on contour-tracing algorithms for extracting and tracing the contour of an object. Most of the algorithms are binary image-based contour-tracing algorithms [
<xref rid="B3-sensors-16-00353" ref-type="bibr">3</xref>
,
<xref rid="B4-sensors-16-00353" ref-type="bibr">4</xref>
,
<xref rid="B5-sensors-16-00353" ref-type="bibr">5</xref>
,
<xref rid="B6-sensors-16-00353" ref-type="bibr">6</xref>
,
<xref rid="B7-sensors-16-00353" ref-type="bibr">7</xref>
,
<xref rid="B8-sensors-16-00353" ref-type="bibr">8</xref>
,
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
], which trace contours on digitized black and white images taken from various image sensors.</p>
<p>In recent years, with the increasing popularity of smart/wearable mobile sensor devices [
<xref rid="B10-sensors-16-00353" ref-type="bibr">10</xref>
], such as smart phones, smart watches and smart glasses, various real-time applications, such as image code recognition, face recognition, optical character recognition (OCR), logo recognition, augmented reality (AR) and mixed reality (MR), have emerged for sensor computing [
<xref rid="B11-sensors-16-00353" ref-type="bibr">11</xref>
,
<xref rid="B12-sensors-16-00353" ref-type="bibr">12</xref>
,
<xref rid="B13-sensors-16-00353" ref-type="bibr">13</xref>
,
<xref rid="B14-sensors-16-00353" ref-type="bibr">14</xref>
,
<xref rid="B15-sensors-16-00353" ref-type="bibr">15</xref>
]. Because smart/wearable mobile sensor devices possess limited hardware resources, such as low-performance processors, small-sized memory, low-resolution displays and low battery capacity, they require simple and fast algorithms for image processing.</p>
<p>Generally, a contour tracing algorithm can be evaluated based on the following four criteria: (1) the accuracy of contour tracing; (2) processing time; (3) data size to save the traced contour information; and (4) the ability to accurately restore and enlarge the original contour using the saved data. However, few studies on contour-tracing algorithms have sought to satisfy all of these criteria. Some of the conventional algorithms miss contour pixels that are at specific relative pixel locations, and others require considerable processing time to trace the pixels, because shortcuts to the local patterns are not considered [
<xref rid="B7-sensors-16-00353" ref-type="bibr">7</xref>
,
<xref rid="B16-sensors-16-00353" ref-type="bibr">16</xref>
]. Moreover, most of the algorithms have no data-compression capabilities that enable them to save the contour information, and some of them cannot restore the contour perfectly using the saved data [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
].</p>
<p>In this paper, we propose a novel contour-tracing algorithm based on pixel following that overcomes the above-mentioned problems,
<italic>i.e.</italic>
,: (1) it provides fast and accurate results for contour-pixel tracing; (2) contour information can be compressed to reduce the memory size; and (3) it accurately restores the compressed data to the original contour image. In order to achieve the objectives, the proposed algorithm initially distinguishes the local patterns made by adjacent contour pixels, and it then finds the next contour pixel that will be traced from the pattern.</p>
<p>The paper is organized as follows. In
<xref ref-type="sec" rid="sec2-sensors-16-00353">Section 2</xref>
, we categorize conventional contour-tracing algorithms and introduce their characteristics. Then, in
<xref ref-type="sec" rid="sec3-sensors-16-00353">Section 3</xref>
, we analyze their performance based on the accuracy and speed. Subsequently, in
<xref ref-type="sec" rid="sec4-sensors-16-00353">Section 4</xref>
, the proposed algorithm is described, and its contour tracing procedure, contour data compression technique and restoration technique are presented. In
<xref ref-type="sec" rid="sec5-sensors-16-00353">Section 5</xref>
, we present a comparison of the conventional algorithms and the proposed algorithm on the basis of their performance, along with experimental results that include the number of traced pixels and the processing times for real-time large-sized images. Moreover, we compare the compressed data size and its restored results with the original traced contour pixels. Finally, in
<xref ref-type="sec" rid="sec6-sensors-16-00353">Section 6</xref>
, we summarize the characteristics and experimental results of the proposed algorithm.</p>
</sec>
<sec id="sec2-sensors-16-00353">
<title>2. Related Works</title>
<p>To determine whether a pixel has a dark or light intensity, most conventional contour-tracing algorithms process using 2D binary images that consist of black and white pixels through binarization. In the digitized image, we can assume that the objects have black pixels and that the background has white pixels; therefore, a contour pixel is black, and it has at least one adjacent pixel that is white.</p>
<sec id="sec2dot1-sensors-16-00353">
<title>2.1. Overview</title>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f001">Figure 1</xref>
shows examples of contour traces that were obtained using the contour-tracing algorithms. The conventional contour algorithms can typically be categorized into three types as follows: pixel following, vertex following and run-data-based following [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
,
<xref rid="B18-sensors-16-00353" ref-type="bibr">18</xref>
,
<xref rid="B19-sensors-16-00353" ref-type="bibr">19</xref>
]. Of these, the pixel-following method is the most common.</p>
<sec id="sec2dot1dot1-sensors-16-00353">
<title>2.1.1. Pixel-Following Method</title>
<p>The pixel-following method traces contour pixels in a predefined manner and then saves their coordinates in memory according to the trace order. In
<xref ref-type="fig" rid="sensors-16-00353-f001">Figure 1</xref>
a, the algorithm traces contour pixels along the clockwise direction from the current pixel,
<italic>i.e.</italic>
, it sequentially searches adjacent black pixels of the current pixel using a relative directional order, such as left, front-left, front, front-right, right, rear-right and rear. Pixel-following methods, such as the simple boundary follower (SBF) [
<xref rid="B4-sensors-16-00353" ref-type="bibr">4</xref>
,
<xref rid="B5-sensors-16-00353" ref-type="bibr">5</xref>
,
<xref rid="B6-sensors-16-00353" ref-type="bibr">6</xref>
], modified SBF (MSBF) [
<xref rid="B3-sensors-16-00353" ref-type="bibr">3</xref>
], improved SBF (ISBF) [
<xref rid="B7-sensors-16-00353" ref-type="bibr">7</xref>
], Moore-neighbor tracing (MNT) [
<xref rid="B20-sensors-16-00353" ref-type="bibr">20</xref>
], the radial sweep algorithm (RSA) [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
] and the Theo Pavlidis algorithm (TPA) [
<xref rid="B8-sensors-16-00353" ref-type="bibr">8</xref>
], have simple rules for tracing contour pixels based on a chain code. These methods require a frame-size memory to trace the contour and generate erroneous images when the contour image is enlarged [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
] because they maintain only the pixel coordinates.</p>
</sec>
<sec id="sec2dot1dot2-sensors-16-00353">
<title>2.1.2. Vertex-Following Method</title>
<p>The vertex-following method traces the vertices of the contour pixels that are located on the edges between the contour pixels and the background pixels [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
]. Its procedure is similar to that of the pixel-following method because it uses a chain code and requires a frame-size memory for contour tracing; however, it traces the corners of the contour pixels and their connected edges. Moreover, it stores the corner points of the contour pixels in order to save the traced contour information, and the data can be compressed by reducing the number of points in a straight line. For example, in
<xref ref-type="fig" rid="sensors-16-00353-f001">Figure 1</xref>
b, five points of the contour from s to t can be stored as there are only two corner points,
<italic>i.e.</italic>
,
<inline-formula>
<mml:math id="mm1">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm2">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>6</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
based on the
<inline-formula>
<mml:math id="mm3">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
coordinate system. Moreover, when the contour images are enlarged, the vertex-following method can provide the correct image [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
] because the traced points form the boundaries of the contour.</p>
</sec>
<sec id="sec2dot1dot3-sensors-16-00353">
<title>2.1.3. Run-Data-Based Following Method</title>
<p>The run-data-based following method, which involves the edge-point tracing of run data [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
,
<xref rid="B19-sensors-16-00353" ref-type="bibr">19</xref>
], uses run data in pairs consisting of an object’s left and right edges, which are obtained using horizontal scan lines from left to right on an image. The object can have an outer contour and additional inner contours. Therefore, there are five types of run data: (left edge of outer contour, right edge of outer contour), (left edge of outer contour, left edge of inner contour), (right edge of inner contour, left edge of inner contour), (right edge of inner contour, right edge of outer contour) and (right edge of outer contour, left edge of outer contour). For contour following, the run-data-based following method constructs a run-following relationship between the edge points of two adjacent scan lines. In
<xref ref-type="fig" rid="sensors-16-00353-f001">Figure 1</xref>
c, Scan Line #3 detects (left edge of 5, right edge of 6), and Scan Line #4 detects (left edge of 7, right edge of 8). Subsequently, the run-following relationships between 5 and 7 and between 8 and 6 are generated. The method uses only one or two line buffers and therefore requires a smaller amount of memory compared to the pixel-following and vertex-following methods. Examples of this method are the run-type direction code (RD code) method [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
], the PXY table-based method [
<xref rid="B19-sensors-16-00353" ref-type="bibr">19</xref>
] and the OpenCV method [
<xref rid="B21-sensors-16-00353" ref-type="bibr">21</xref>
].</p>
<p>
<xref ref-type="table" rid="sensors-16-00353-t001">Table 1</xref>
lists the characteristics of the contour-following methods. The pixel-following method and vertex-following method trace contours without scanning all of the pixels of the image, and their transition data, such as contour points and the tracing sequence, are generated automatically by the contour-following process. Therefore, only a few pixels need to be scanned in order to obtain the first contour pixel representing the starting point of the object. Despite these merits, they are not suitable for large images with many objects because they require more operations and a larger memory when compared to the run-data-based following method. In other words, they scan all of the pixels with an image-buffer size memory in order to obtain all of the objects, and they have several additional operations that enable them to detect whether to follow a contour pixel for all of the contour pixels and their adjacent background pixels.</p>
<p>On the contrary, the run-data-based following method searches the edge points with a smaller memory and constructs run-following relationships between edge points. Therefore, the traced run-following results are changed iteratively while the edge points are updated. This method is not simple, but it is faster than the other methods for large-scale images, because it scans all of the pixels once; and it does not require any additional operations to be carried out on the pixels. Hence, it is suitable for large-scale image-based applications involving a large number of objects, such as document recognition [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
].</p>
</sec>
</sec>
<sec id="sec2dot2-sensors-16-00353">
<title>2.2. Conventional Contour Tracing Algorithms</title>
<p>Let
<italic>I</italic>
be a binary digital image with
<inline-formula>
<mml:math id="mm4">
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
pixels, where the coordinate of the top-leftmost pixel is
<inline-formula>
<mml:math id="mm5">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and that of the bottom-rightmost pixel is
<inline-formula>
<mml:math id="mm6">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>M</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
. In
<italic>I</italic>
, a pixel can be represented as
<inline-formula>
<mml:math id="mm7">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mi>x</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo></mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>M</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mi>y</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo></mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
. Most contour-tracing algorithms use a tracer
<inline-formula>
<mml:math id="mm8">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
with absolute directional information
<inline-formula>
<mml:math id="mm9">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo></mml:mo>
<mml:mo>{</mml:mo>
<mml:mi>N</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>E</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, and they have the following basic sequence:
<list list-type="order">
<list-item>
<p>The tracer starts contour tracing at the contour of an object after it saves the starting point along with its initial direction.</p>
</list-item>
<list-item>
<p>The tracer determines the next contour point using its specific rule of following paths according to the adjacent pixels and then moves to the contour point and changes its absolute direction.</p>
</list-item>
<list-item>
<p>If the tracer reaches the start point, then the trace procedure is terminated.</p>
</list-item>
</list>
</p>
<p>To determine the next contour point, which may be a contour pixel or pixel corner, the tracer detects the intensity of its adjacent pixel
<inline-formula>
<mml:math id="mm10">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
and the new absolute direction
<inline-formula>
<mml:math id="mm11">
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
for
<inline-formula>
<mml:math id="mm12">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
by using relative direction information
<inline-formula>
<mml:math id="mm13">
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mo>{</mml:mo>
<mml:mi>f</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>f</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>l</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>l</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mi>l</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
<inline-formula>
<mml:math id="mm14">
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mo>{</mml:mo>
<mml:mi>f</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
. For example, if the absolute direction of the current tracer
<inline-formula>
<mml:math id="mm15">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
is
<italic>N</italic>
, the left direction of the tracer
<inline-formula>
<mml:math id="mm16">
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
is
<italic>W</italic>
. Similarly, the left pixel of tracer
<inline-formula>
<mml:math id="mm17">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
is
<inline-formula>
<mml:math id="mm18">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
.
<xref ref-type="fig" rid="sensors-16-00353-f002">Figure 2</xref>
a,b show the directional information of the tracer, and
<xref ref-type="fig" rid="sensors-16-00353-f002">Figure 2</xref>
c shows the different types of contour pixels. The contour pixels can be classified into four types, namely straight line, inner corner pixel, outer corner pixel and inner-outer corner pixel. In
<xref ref-type="fig" rid="sensors-16-00353-f002">Figure 2</xref>
c, “
<italic>O</italic>
” represents the outer corner, “
<italic>I</italic>
” represents the inner corner and “
<inline-formula>
<mml:math id="mm19">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
” represents the inner-outer corner according to the local pattern of the contour.</p>
<p>In this study, we focus on a contour-tracing algorithm that is suitable for cases involving a relatively small number of objects and that require real-time tracing, such as augmented reality (AR), mixed reality (MR) and recognition image-based code in small-scale images, e.g., a mobile computing environment. Hence, we first introduce and briefly describe the conventional contour-tracing algorithms that are used in this environment and analyze their tracing accuracy and characteristics.</p>
<sec id="sec2dot2dot1-sensors-16-00353">
<title>2.2.1. Simple Boundary Follower</title>
<p>The simple boundary follower (SBF) is also known as Papert’s turtle algorithm [
<xref rid="B6-sensors-16-00353" ref-type="bibr">6</xref>
] and as a square-tracing algorithm [
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
], and it is the simplest contour-tracing algorithm. Initially, the location of tracer
<italic>S</italic>
is saved, and the tracer moves in a left or right direction. If the pixel tracer is located on a contour pixel, the tracer moves left; otherwise, it moves right. The procedure is shown in Algorithm 1.</p>
<array>
<tbody>
<tr>
<td style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">
<bold>Algorithm 1</bold>
Algorithm of the simple boundary follower.</td>
</tr>
<tr>
<td style="border-bottom:solid thin" rowspan="1" colspan="1">
<list list-type="simple">
<list-item>
<label>1:</label>
<p>
<bold>procedure</bold>
SBF</p>
</list-item>
<list-item>
<label>2:</label>
<p>    
<inline-formula>
<mml:math id="mm20">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>3:</label>
<p>    
<bold>do</bold>
</p>
</list-item>
<list-item>
<label>4:</label>
<p>        
<bold>if</bold>
<inline-formula>
<mml:math id="mm21">
<mml:mi>P</mml:mi>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>5:</label>
<p>           
<inline-formula>
<mml:math id="mm22">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>6:</label>
<p>        
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>7:</label>
<p>           
<inline-formula>
<mml:math id="mm23">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>8:</label>
<p>    
<bold>while</bold>
<inline-formula>
<mml:math id="mm24">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
</list>
</td>
</tr>
</tbody>
</array>
</sec>
<sec id="sec2dot2dot2-sensors-16-00353">
<title>2.2.2. Modified Simple Boundary Follower</title>
<p>SBF cannot trace an inner-outer corner pixel that is located at the left rear, and the modified SBF (MSBF) [
<xref rid="B3-sensors-16-00353" ref-type="bibr">3</xref>
] was developed to trace these pixels. If the tracer is adjacent to the left-rear inner-outer corner, this condition implies that its left-rear pixel is black (object), and the left and rear pixels are white (background); the tracer will move to the left-rear pixel, and its direction is then changed toward the rear direction. After the movement, the tracer goes directly to the left pixel to avoid an infinite loop.
<xref ref-type="fig" rid="sensors-16-00353-f003">Figure 3</xref>
shows examples of the SBF and MSBF paths for a left-rear direction inner-outer corner. In the case of the SBF, if the tracer is on pixel
<italic>A</italic>
with direction
<italic>N</italic>
, it misses pixel
<italic>B</italic>
. On the contrary, the MSBF can detour pixel
<italic>B</italic>
.</p>
</sec>
<sec id="sec2dot2dot3-sensors-16-00353">
<title>2.2.3. Improved Simple Boundary Follower</title>
<p>The SBF and MSBF require movement operations for both contour and background pixels; therefore, time is wasted during movement on the background pixel, and they cannot trace the inner-corner pixel in front of the tracer [
<xref rid="B7-sensors-16-00353" ref-type="bibr">7</xref>
,
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
]. Hence, we have proposed an improved SBF (ISBF) [
<xref rid="B7-sensors-16-00353" ref-type="bibr">7</xref>
] that is based on our previous research aimed at overcoming these limitations. The ISBF has six cases for following contour pixels based on the local patterns of the contour pixels. The modified version [
<xref rid="B16-sensors-16-00353" ref-type="bibr">16</xref>
] of ISBF is shown in Algorithm 2.</p>
<array>
<tbody>
<tr>
<td style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">
<bold>Algorithm 2</bold>
Algorithm of the improved simple boundary follower.</td>
</tr>
<tr>
<td style="border-bottom:solid thin" rowspan="1" colspan="1">
<list list-type="simple">
<list-item>
<label>1:</label>
<p>
<bold>procedure</bold>
ISBF</p>
</list-item>
<list-item>
<label>2:</label>
<p>    
<inline-formula>
<mml:math id="mm25">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, where
<italic>P</italic>
is on black</p>
</list-item>
<list-item>
<label>3:</label>
<p>    
<bold>do</bold>
</p>
</list-item>
<list-item>
<label>4:</label>
<p>        
<bold>if</bold>
<inline-formula>
<mml:math id="mm26">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>5:</label>
<p>           // Case 4a: Left neighbor</p>
</list-item>
<list-item>
<label>6:</label>
<p>           
<inline-formula>
<mml:math id="mm27">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>7:</label>
<p>        
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>8:</label>
<p>           
<bold>if</bold>
<inline-formula>
<mml:math id="mm28">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black and
<inline-formula>
<mml:math id="mm29">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= white
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>9:</label>
<p>               // Case 4b: Inner-outer corner at left-rear</p>
</list-item>
<list-item>
<label>10:</label>
<p>               
<inline-formula>
<mml:math id="mm30">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>11:</label>
<p>           
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>12:</label>
<p>               
<bold>if</bold>
<inline-formula>
<mml:math id="mm31">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>13:</label>
<p>                   
<bold>if</bold>
<inline-formula>
<mml:math id="mm32">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>14:</label>
<p>                       // Case 4d: Inner corer at front</p>
</list-item>
<list-item>
<label>15:</label>
<p>                       
<inline-formula>
<mml:math id="mm33">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>16:</label>
<p>                       
<inline-formula>
<mml:math id="mm34">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>17:</label>
<p>                   
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>18:</label>
<p>                       // Case 4c: Inner-outer corner at front-left</p>
</list-item>
<list-item>
<label>19:</label>
<p>                       
<inline-formula>
<mml:math id="mm35">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>20:</label>
<p>               
<bold>else</bold>
<bold>if</bold>
<inline-formula>
<mml:math id="mm36">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>21:</label>
<p>                   // Case 4e: Front neighbor</p>
</list-item>
<list-item>
<label>22:</label>
<p>                   
<inline-formula>
<mml:math id="mm37">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>23:</label>
<p>               
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>24:</label>
<p>                   // Case 4f: Outer corner</p>
</list-item>
<list-item>
<label>25:</label>
<p>                   
<inline-formula>
<mml:math id="mm38">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>26:</label>
<p>    
<bold>while</bold>
<inline-formula>
<mml:math id="mm39">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
</list>
</td>
</tr>
</tbody>
</array>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f004">Figure 4</xref>
represents the tracing path of the ISBF based on the local contour patterns. While the SBF cannot trace in Cases 4b and 4d and the MSBF cannot follow in Case 4d, the ISBF successfully traces in all of the cases. In the figure, the waypoint (dotted line) is subjected to a detection operation to determine whether it is black or white without employing a movement operation.</p>
</sec>
<sec id="sec2dot2dot4-sensors-16-00353">
<title>2.2.4. Moore-Neighbor Tracing</title>
<p>Moore-neighbor tracing (MNT) finds the next contour pixel using eight connected chain codes with a clockwise sequence starting from the rear pixel of the tracer,
<italic>i.e.</italic>
, the tracer first moves toward the rear (
<inline-formula>
<mml:math id="mm40">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
) and finds the next clockwise contour pixel, such as the left-rear, left, font-left, front, front-right, right and rear-right pixels [
<xref rid="B20-sensors-16-00353" ref-type="bibr">20</xref>
,
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
].</p>
</sec>
<sec id="sec2dot2dot5-sensors-16-00353">
<title>2.2.5. Radial Sweep Algorithm</title>
<p>The radial sweep algorithm (RSA) [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
] is similar to MNT, but its tracer has no directional information. Therefore, it maintains two points, namely the previous pixel and current pixel for the initial tracing direction.
<xref ref-type="fig" rid="sensors-16-00353-f005">Figure 5</xref>
b illustrates an example of a tracing path obtained using RSA from
<inline-formula>
<mml:math id="mm41">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
to
<inline-formula>
<mml:math id="mm42">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
. In the figure, the direction vector from
<inline-formula>
<mml:math id="mm43">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
to
<inline-formula>
<mml:math id="mm44">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
is first generated, and the tracer then searches for the next contour pixel using the previous pixel
<inline-formula>
<mml:math id="mm45">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
for the clockwise direction of the vector.</p>
</sec>
<sec id="sec2dot2dot6-sensors-16-00353">
<title>2.2.6. Theo Pavlidis Algorithm</title>
<p>To determine the next contour pixel, the Theo Pavlidis algorithm (TPA) [
<xref rid="B8-sensors-16-00353" ref-type="bibr">8</xref>
] considers only three adjacent pixels, e.g., front-left, front and front-right. If all three pixels are white, the tracer turns right.
<xref ref-type="fig" rid="sensors-16-00353-f006">Figure 6</xref>
describes the sequence of this algorithm.</p>
</sec>
</sec>
<sec id="sec2dot3-sensors-16-00353">
<title>2.3. Conventional Data Compression and Restoration</title>
<p>The RD code method [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
] comprises two major techniques. The first one traces the contour using a hybrid method that employs vertex following with run data, and it generates the corresponding RD codes. The other generates compressed contour data that can be used to restore the contour based on representative points and their corresponding RD codes. The representative points are selected from the vertices of contour pixels, and they are feature points of the contour. Moreover, the RD code can represent 10 local contour patterns and their corresponding following paths. Therefore, by saving the representative points and their corresponding RD codes instead of all of the contour points, we can reduce the memory size used to store the contour data.
<xref ref-type="fig" rid="sensors-16-00353-f007">Figure 7</xref>
a [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
] gives an example of representative points. There are four types of representative points in the RD method, namely two outer corner points and two inner corner points, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f007">Figure 7</xref>
b. Although this technique can save data in small files, it does not consider the inner-outer corner pixel.</p>
</sec>
</sec>
<sec id="sec3-sensors-16-00353">
<title>3. Analysis of Conventional Contour-Following Algorithms</title>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
illustrates the tracing results of the pixel-following methods based on the contour shown in
<xref ref-type="fig" rid="sensors-16-00353-f001">Figure 1</xref>
. In the figure, the arrow with an anchor is the tracer at the starting pixel, the solid arrow shows the movement operation of the tracer and the dotted line is the way point (detected pixel) for determining whether or not the pixel is a contour pixel for pixel following.</p>
<sec id="sec3dot1-sensors-16-00353">
<title>3.1. Pixel-Following Cases</title>
<p>As shown in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
, ISBF traces most types of contour pixels, such as the inner corner, outer corner, inner-outer corner and straight-line pixels. In the case of the SBF, there are inconsistencies regarding tracing at the inner corner and inner-outer corner. For example, in the figure, the inner-corner pixel
<inline-formula>
<mml:math id="mm46">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>6</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and inner-outer corner pixel
<inline-formula>
<mml:math id="mm47">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>7</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>8</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
are traced, but the inner corner
<inline-formula>
<mml:math id="mm48">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and inner-outer corner
<inline-formula>
<mml:math id="mm49">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>7</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>9</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
pixels are missed. In the case of the MSBF, all of the inner-outer corner pixels are traced, but it has inconsistencies with regard to tracing the inner-corner pixel. Moreover, MNT, RSA and TPA have no problems with consistency, but they cannot trace the inner corners. Among these algorithms, the TPA can be easily changed to trace an inner-corner pixel, because it has waypoints on the inner corners, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
f.</p>
</sec>
<sec id="sec3dot2-sensors-16-00353">
<title>3.2. Start-Up Condition and Stopping Criteria</title>
<p>The pixel-following algorithm requires start and stop criteria to avoid incomplete or infinite contour tracing.</p>
<sec id="sec3dot2dot1-sensors-16-00353">
<title>3.2.1. Assumption for Start</title>
<p>Commonly, tracing starts when the tracer enters a black pixel from a white pixel. Therefore, at the start of tracing, the tracer must be placed on a black pixel, and its rear pixel
<inline-formula>
<mml:math id="mm50">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
should be white. Moreover, in the case of the MSBF and ISBF, if the
<inline-formula>
<mml:math id="mm51">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
of the start pixel is an inner-outer corner pixel, it cannot trace all of the contour pixels using their stopping criteria [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
,
<xref rid="B16-sensors-16-00353" ref-type="bibr">16</xref>
]. In addition, TPA has to select a start pixel that has white pixels at the tracer positions
<inline-formula>
<mml:math id="mm52">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
,
<inline-formula>
<mml:math id="mm53">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm54">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
[
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
]; otherwise, it cannot trace the left pixel of the contour.</p>
</sec>
<sec id="sec3dot2dot2-sensors-16-00353">
<title>3.2.2. Stop Criterion</title>
<p>There are three methods for stopping the contour tracing [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
,
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
]. The first method is Jacob’s stopping criterion [
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
], which terminates the trace when the tracer reenters the start pixel with an absolute direction that is the same as the start direction,
<italic>i.e.</italic>
, if the current tracer
<inline-formula>
<mml:math id="mm55">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
is the same as the start tracer
<inline-formula>
<mml:math id="mm56">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, the pixel following is terminated. SBF, MSBF and ISBF use this criterion, and their tracing terminates at the start pixel, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
a–c. The second method uses the number of reentries to the start pixel. In
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
d–f, the tracers of MNT and TPA revisit the start pixel
<inline-formula>
<mml:math id="mm57">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
with different directional information; therefore, they do not stop, but rather go to the next contour pixel if the first method is applied. For this reason, if a specified number of reentries, e.g., three or four times, is satisfied, the trace is terminated [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
]. This method is sometimes not efficient, because it requires unnecessary tracing to be performed one or more times. The final method checks the trace route that is traced by the previous pixel and the current pixel of the tracer and determines whether it has already been passed. This method is used for RSA [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
,
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
] because its tracer has only pixel-location information and no directional information. In other words, whenever the tracer enters the
<italic>i</italic>
-th contour pixel, the current pixel location
<inline-formula>
<mml:math id="mm58">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
is appended sequentially into the traced contour path. Moreover, if the traced path of
<inline-formula>
<mml:math id="mm59">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
appears twice, the tracing is terminated. This method can be applied for all pixel-following methods, and it is simpler than the second method; however, it requires more operations than Jacob’s stopping criterion.</p>
</sec>
<sec id="sec3dot2dot3-sensors-16-00353">
<title>3.2.3. Limitations of Conventional Pixel-Following Methods</title>
<p>The above-mentioned conventional pixel-following methods have certain limitations. First, some of the algorithms, such as SBF and MSBF, perform unnecessary movement operations on white pixels, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
a,b. Second, not all of the algorithms can define the contour in the case of contour pixels; therefore, they cannot be a descriptive feature of the object and determine connectivity among objects. For example, in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
b, MSBF detects
<inline-formula>
<mml:math id="mm60">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>7</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
as the inner-outer corner pixel, but does not indicate
<inline-formula>
<mml:math id="mm61">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>8</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>7</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
as an inner-outer corner, because the traced paths on the pixels are different. Moreover, MSBF also cannot determine the inner corner, outer corner and straight-line pixel, as is the case with SBF. In the case of ISBF, it determines the inner-outer corner, front-inner corner and front-straight line pixels, but cannot determine the left-inner corner, left-straight line and some of the outer-corner pixels, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
c. Similarly, MNT and RSA cannot determine and detect the inner corners, and TPA cannot classify the contour pixels into the different types of contour pixels. Finally, the data size of the traced contour must be considered. The pixel-following methods save all of the pixel points; therefore, their data are larger than those of the RD code method.</p>
</sec>
</sec>
</sec>
<sec id="sec4-sensors-16-00353">
<title>4. Proposed Contour-Tracing Algorithm</title>
<p>In this section, we propose a novel pixel-following algorithm that traces contour pixels by considering their local patterns. Therefore, it can classify the contour pixel as inner corner, outer corner, inner-outer corner and straight-line contour types. Further, it can easily determine the next contour pixel. Moreover, it can determine and save representative points of an image, such as the RD code method, by using pixel following, but not using run-data-based following. In addition, the data can be restored to the original contour pixels without the RD code data.</p>
<sec id="sec4dot1-sensors-16-00353">
<title>4.1. Contour Following</title>
<sec id="sec4dot1dot1-sensors-16-00353">
<title>4.1.1. Assumptions for Start-Up and Stopping Criteria</title>
<p>The proposed algorithm runs under two assumptions for starting. One is the general condition for pixel following, where the rear pixel of the tracer on the start pixel is white. The other is that there is no left-rear inner-outer corner for the tracer at the start position,
<italic>i.e.</italic>
, if the rear and the left pixels are white and the rear-left pixel is black, the start pixel has to be changed. These are the same starting conditions as those used for MSBF and ISBF. Moreover, the stop criteria of the proposed algorithm is Jacob’s stopping criterion, and the tracer is always on a contour pixel.</p>
</sec>
<sec sec-type="methods" id="sec4dot1dot2-sensors-16-00353">
<title>4.1.2. Procedures</title>
<p>The proposed algorithm has two stages. First, the tracer follows the contour pixel based on the intensities of the left-rear and left pixels. After that, the tracer follows the contour pixels according to the intensities of the front and front-left pixels.
<xref ref-type="fig" rid="sensors-16-00353-f009">Figure 9</xref>
shows the contour tracing cases for the proposed contour-following algorithm. In the figure, the tracer is first on
<inline-formula>
<mml:math id="mm62">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
and queries states of
<inline-formula>
<mml:math id="mm63">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm64">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f009">Figure 9</xref>
a, and then, the states determine the corresponding path to be traced from among Cases (1)–(4), as shown in
<xref ref-type="fig" rid="sensors-16-00353-f009">Figure 9</xref>
b. After Stage 1, the moved tracer queries states
<inline-formula>
<mml:math id="mm65">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm66">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
, and it then traces contour pixels along the corresponding path using the states from among Cases (5)–(8).</p>
<p>Hence, by using the proposed algorithm, the inner corners traced are considered as Case (1) or (6); the inner-outer corners are considered as Case (2) or (5); the outer corners are considered as Case (4) or (8); and the straight-line pixels are considered as the other cases. Therefore, all of the cases are easily classified using the algorithm.</p>
</sec>
<sec id="sec4dot1dot3-sensors-16-00353">
<title>4.1.3. States</title>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f010">Figure 10</xref>
describes the state transition for the automation of the proposed algorithm. In the figure, the start and termination occur at State 0. The first stage runs using States 1–4, and it then transits to State 5. The second stage continues from State 5 using States 6–11, and it then transits to State 0. For example, Case (1) in
<xref ref-type="fig" rid="sensors-16-00353-f009">Figure 9</xref>
b can be executed using the transit sequence State 1, State 3 and State 5.</p>
<p>In
<xref ref-type="fig" rid="sensors-16-00353-f010">Figure 10</xref>
,
<inline-formula>
<mml:math id="mm67">
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mi>N</mml:mi>
<mml:mn>1</mml:mn>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>N</mml:mi>
<mml:mn>2</mml:mn>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>N</mml:mi>
<mml:mn>3</mml:mn>
<mml:mspace width="4pt"></mml:mspace>
<mml:mi>N</mml:mi>
<mml:mn>4</mml:mn>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
represents the intensity vector of the tracer’s four adjacent pixels shown in
<xref ref-type="fig" rid="sensors-16-00353-f009">Figure 9</xref>
a. In the vector,
<italic>d</italic>
implies “do not care”;
<italic>B</italic>
represents a contour pixel (black) and
<italic>W</italic>
represents the background pixel (white). Moreover, update
<inline-formula>
<mml:math id="mm68">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
refers to the movement operation, where
<italic>P</italic>
is the new contour-pixel location and
<italic>d</italic>
is the new directional information for the tracer. In States 1 and 3, the updates occur based on the tracer of State 0, and other updates are based on the tracer information in State 5.</p>
</sec>
<sec id="sec4dot1dot4-sensors-16-00353">
<title>4.1.4. Characteristics of the Proposed Algorithm</title>
<p>We designed the proposed algorithm based on two stages with two major goals. First, the check operation for stopping occurs only at State 0; therefore, the number of checking operations on black pixels is reduced. In other words, the proposed algorithm verifies that the check operation occurs when only the tracer has a white rear pixel. This is more efficient when compared to the check operation that occurs for every contour pixel, because its start condition and stop criterion also satisfy the condition that the rear pixel of the tracer on the start pixel should be white. Therefore, the transition of Stage 2 to States 6–11 for processing Cases (5)–(8) is designed such that it can be returned to State 0 only if the tracer has a white rear pixel, and it reduces any unnecessary operations that are required to stop the checking. Besides, the tracers of Cases (2) and (4) have a white rear pixel after the movement, but their end conditions are not considered. In Case (2), at the start, the tracer avoids the inner-outer corner pixels as the start and end pixel. Moreover, in Case (4), the tracer has no update; therefore, it is unnecessary to perform the check operation twice.</p>
<p>Second, the proposed algorithm eliminates some of the redundant operations that are used to detect white pixels. The conventional algorithms do not consider white pixels in the previous path; therefore, they sometimes re-detect white pixels on the previous tracing during the current tracing. For example, in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
, the white pixel at
<inline-formula>
<mml:math id="mm69">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
is detected twice while determining contour pixels, such as
<inline-formula>
<mml:math id="mm70">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm71">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
. Moreover, RSA detects
<inline-formula>
<mml:math id="mm72">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
three times while determining
<inline-formula>
<mml:math id="mm73">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
,
<inline-formula>
<mml:math id="mm74">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm75">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>6</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
. On the contrary, the proposed algorithm has two stages, and its second stage avoids the previous path.
<xref ref-type="fig" rid="sensors-16-00353-f011">Figure 11</xref>
shows the contour-tracing results obtained for the proposed algorithm, and it detects
<inline-formula>
<mml:math id="mm76">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>4</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
once for contour tracing. Moreover, the figure shows that the proposed algorithm has fewer operations on the white pixels when compared to conventional pixel-following methods, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f008">Figure 8</xref>
, and it traces all types of contours.</p>
<p>The pseudocode of the proposed algorithm is shown in Algorithm 3.</p>
<p>
<xref ref-type="table" rid="sensors-16-00353-t002">Table 2</xref>
describes the tracing results that were obtained by using the proposed algorithm up to the stage at which the tracer enters the 11th pixel. The code represents the contour pixel type, and it is classified automatically during tracing.</p>
<array>
<tbody>
<tr>
<td style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">
<bold>Algorithm 3</bold>
Procedure of the proposed tracer.</td>
</tr>
<tr>
<td style="border-bottom:solid thin" rowspan="1" colspan="1">
<list list-type="simple">
<list-item>
<label>1:</label>
<p>
<bold>procedure</bold>
<sc>Proposed_Tracer</sc>
</p>
</list-item>
<list-item>
<label>2:</label>
<p>    
<inline-formula>
<mml:math id="mm77">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, where
<italic>P</italic>
is on black,
<inline-formula>
<mml:math id="mm78">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
is on white and
<inline-formula>
<mml:math id="mm79">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>3:</label>
<p>    // Whenever
<inline-formula>
<mml:math id="mm80">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
is updated,
<italic>i</italic>
increases by1 and
<inline-formula>
<mml:math id="mm81">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:msup>
<mml:mi>p</mml:mi>
<mml:mo></mml:mo>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>d</mml:mi>
<mml:mo></mml:mo>
</mml:msup>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
is saved automatically</p>
</list-item>
<list-item>
<label>4:</label>
<p>    
<bold>do</bold>
</p>
</list-item>
<list-item>
<label>5:</label>
<p>        // Stage 1</p>
</list-item>
<list-item>
<label>6:</label>
<p>        
<bold>if</bold>
<inline-formula>
<mml:math id="mm82">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>7:</label>
<p>           
<bold>if</bold>
<inline-formula>
<mml:math id="mm83">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>8:</label>
<p>               // Case 1</p>
</list-item>
<list-item>
<label>9:</label>
<p>               
<inline-formula>
<mml:math id="mm84">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm85">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>I</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>10:</label>
<p>               
<inline-formula>
<mml:math id="mm86">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>11:</label>
<p>           
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>12:</label>
<p>               // Case 2</p>
</list-item>
<list-item>
<label>13:</label>
<p>               
<inline-formula>
<mml:math id="mm87">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>I</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>14:</label>
<p>               
<inline-formula>
<mml:math id="mm88">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm89">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>I</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>15:</label>
<p>        
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>16:</label>
<p>           
<bold>if</bold>
<inline-formula>
<mml:math id="mm90">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>17:</label>
<p>               // Case 3</p>
</list-item>
<list-item>
<label>18:</label>
<p>               
<inline-formula>
<mml:math id="mm91">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm92">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>19:</label>
<p>           
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>20:</label>
<p>               // Case 4</p>
</list-item>
<list-item>
<label>21:</label>
<p>               
<inline-formula>
<mml:math id="mm93">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>O</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
  </p>
</list-item>
<list-item>
<label>22:</label>
<p>        // Stage 2</p>
</list-item>
<list-item>
<label>23:</label>
<p>        
<bold>if</bold>
<inline-formula>
<mml:math id="mm94">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>24:</label>
<p>           
<bold>if</bold>
<inline-formula>
<mml:math id="mm95">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>25:</label>
<p>               // Case 6</p>
</list-item>
<list-item>
<label>26:</label>
<p>               
<inline-formula>
<mml:math id="mm96">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm97">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>I</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>27:</label>
<p>               
<inline-formula>
<mml:math id="mm98">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>28:</label>
<p>           
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>29:</label>
<p>               // Case 5</p>
</list-item>
<list-item>
<label>30:</label>
<p>               
<inline-formula>
<mml:math id="mm99">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>I</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>31:</label>
<p>               
<inline-formula>
<mml:math id="mm100">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mi>L</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm101">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>I</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>32:</label>
<p>        
<bold>else</bold>
<bold>if</bold>
<inline-formula>
<mml:math id="mm102">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
= black
<bold>then</bold>
</p>
</list-item>
<list-item>
<label>33:</label>
<p>           // Case 7</p>
</list-item>
<list-item>
<label>34:</label>
<p>           
<inline-formula>
<mml:math id="mm103">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>35:</label>
<p>        
<bold>else</bold>
</p>
</list-item>
<list-item>
<label>36:</label>
<p>           // Case 8</p>
</list-item>
<list-item>
<label>37:</label>
<p>           
<inline-formula>
<mml:math id="mm104">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>T</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm105">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm106">
<mml:mrow>
<mml:mi mathvariant="italic">Code</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mi>O</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<label>38:</label>
<p>    
<bold>while</bold>
<inline-formula>
<mml:math id="mm107">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>P</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</list-item>
</list>
</td>
</tr>
</tbody>
</array>
<p>In the table,
<inline-formula>
<mml:math id="mm108">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>d</mml:mi>
<mml:mi>e</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
represents only one code, the contour pixel type per contour pixel, but it can have several codes. For example, there is an outer-corner pixel and an inner-outer corner pixel.</p>
</sec>
</sec>
<sec id="sec4dot2-sensors-16-00353">
<title>4.2. Data Compression and Restoration</title>
<p>The proposed algorithm saves representation points and the inner-outer corner points in the form of compressed data in order to reduce the data size. The representation points are feature points that are used for storing and restoring contour pixels, while the inner-outer corner points are used for accurately restoring the inner-outer corner pixels.</p>
<sec id="sec4dot2dot1-sensors-16-00353">
<title>4.2.1. Data Structure</title>
<p>The representative points and inner-outer corner points are represented as vertices of contour pixels.
<xref ref-type="fig" rid="sensors-16-00353-f012">Figure 12</xref>
a shows the point types of the proposed algorithm. There are seven types of representative points. They are two outer corners, two inner corners and one inner-outer corner. In addition, there are two types of inner-outer corner point.
<xref ref-type="fig" rid="sensors-16-00353-f012">Figure 12</xref>
b illustrates all cases of contour tracing for the proposed algorithm and their corresponding representative points and inner-outer corner points.</p>
<p>These points are saved as a sequence during contour tracing. If the
<italic>i</italic>
-th representative point
<inline-formula>
<mml:math id="mm109">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
is equivalent to
<inline-formula>
<mml:math id="mm110">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, then the set of representative points
<italic>R</italic>
is given by
<inline-formula>
<mml:math id="mm111">
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo></mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm112">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mn>0</mml:mn>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>n</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</inline-formula>
because the starting and ending points are the same. Similarly, if
<inline-formula>
<mml:math id="mm113">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
is the
<italic>j</italic>
-th inner-outer corner point, it can be represented using its coordinate and its type. The type of point
<inline-formula>
<mml:math id="mm114">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
is assigned to be
<inline-formula>
<mml:math id="mm115">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>E</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
or
<inline-formula>
<mml:math id="mm116">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f012">Figure 12</xref>
a.
<xref ref-type="table" rid="sensors-16-00353-t003">Table 3</xref>
shows the data structure for data compression and the restoration of the contour pixels using the proposed algorithm.</p>
</sec>
<sec id="sec4dot2dot2-sensors-16-00353">
<title>4.2.2. Contour Pixel Restoration</title>
<p>For the restoration, we propose a restoration algorithm comprising two stages, namely contour restoration and inner-outer corner restoration.</p>
<sec>
<title>Contour Restoration with Representation Points</title>
<p>The sequence of representative points is important for the reconstruction of the contour pixels, because it represents the contour-tracing sequence. Hence, by using the sequence of representative points and the relative location between adjacent representative points in the representative point table, the contour can be restored easily. If there are two sequential representative points
<inline-formula>
<mml:math id="mm117">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm118">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
,
<inline-formula>
<mml:math id="mm119">
<mml:mrow>
<mml:mo>Λ</mml:mo>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, which is the relative position classifier from
<inline-formula>
<mml:math id="mm120">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
to
<inline-formula>
<mml:math id="mm121">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
, can be described as:
<disp-formula id="FD1-sensors-16-00353">
<label>(1)</label>
<mml:math id="mm122">
<mml:mrow>
<mml:mo>Λ</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mtable>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>E</mml:mi>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>where</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo><</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>and</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>></mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mi>E</mml:mi>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>where</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo><</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>and</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo><</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>W</mml:mi>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>where</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>></mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>and</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>></mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mi>W</mml:mi>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>where</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>></mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mtext>and</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo><</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f013">Figure 13</xref>
shows the contour-pixel reconstruction methods using the relative positions from
<inline-formula>
<mml:math id="mm123">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
to
<inline-formula>
<mml:math id="mm124">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
. In the case of
<inline-formula>
<mml:math id="mm125">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mi>E</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
or
<inline-formula>
<mml:math id="mm126">
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>W</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
, the contour pixels are filled in a clockwise manner, while in the other cases, these pixels are filled in a counterclockwise manner.</p>
<p>The methods in
<xref ref-type="fig" rid="sensors-16-00353-f013">Figure 13</xref>
are the basic methods employed to restore the contour, but they are problematic when used to reconstruct the inner-corner pixel using three or more representative points.
<xref ref-type="table" rid="sensors-16-00353-t004">Table 4</xref>
and
<xref ref-type="fig" rid="sensors-16-00353-f014">Figure 14</xref>
show cases of the missing inner-corner pixels using sequential representative points
<inline-formula>
<mml:math id="mm127">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
,
<inline-formula>
<mml:math id="mm128">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm129">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
.</p>
<p>As shown in
<xref ref-type="fig" rid="sensors-16-00353-f015">Figure 15</xref>
, the three representative points cannot restore the inner-corner pixel
<inline-formula>
<mml:math id="mm130">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
. Therefore, if the three sequential points form one of the cases in
<xref ref-type="table" rid="sensors-16-00353-t004">Table 4</xref>
,
<inline-formula>
<mml:math id="mm131">
<mml:msub>
<mml:mi>P</mml:mi>
<mml:mi>m</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
of the middle representative point
<inline-formula>
<mml:math id="mm132">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
must be filled with a dark color.</p>
<p>This reconstruction method is different from the restoration approach in the RD code method because the proposed method does not need the RD code, but requires only representative points, and their saved sequence naturally replaces the RD code. Therefore, it requires a smaller memory size when compared to the RD code method.</p>
</sec>
<sec>
<title>Inner-Outer Corner Restoration</title>
<p>The restored contour obtained using only the representative points has no inner-outer corners because the inner-outer corner is not considered. For this reason, if there are inner-outer corner points in the data table, as shown in
<xref ref-type="table" rid="sensors-16-00353-t004">Table 4</xref>
, the inner-outer corners are generated using the data
<inline-formula>
<mml:math id="mm133">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
with their point coordinates and types. If a pixel restored using the representative points is
<inline-formula>
<mml:math id="mm134">
<mml:mrow>
<mml:mi>o</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
and
<italic>O</italic>
is the restored contour, the function of the inner-outer corner restoration,
<inline-formula>
<mml:math id="mm135">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
, can be obtained as:
<disp-formula id="FD2-sensors-16-00353">
<label>(2)</label>
<mml:math id="mm136">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mtable>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mtext>where</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mi>N</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>O</mml:mi>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:mi>o</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mtext>where</mml:mtext>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>c</mml:mi>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mi>N</mml:mi>
<mml:mi>E</mml:mi>
<mml:mo></mml:mo>
<mml:mi>S</mml:mi>
<mml:mi>W</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mfenced>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
</sec>
</sec>
</sec>
</sec>
<sec id="sec5-sensors-16-00353">
<title>5. Experimental Result</title>
<p>To compare the proposed algorithm to conventional algorithms, we perform an experiment to determine their accuracy, speed and stored data size.
<xref ref-type="table" rid="sensors-16-00353-t005">Table 5</xref>
shows the experimental environment.</p>
<p>We experimented on nine CCITT (Consultative Committee for International Telephony and Telegraphy) standard fax images with 200 dots per inch (dpi) [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
]. All of these images have
<inline-formula>
<mml:math id="mm137">
<mml:mrow>
<mml:mn>1728</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>2339</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
pixels and a file size of 11,842 KB.
<xref ref-type="table" rid="sensors-16-00353-t006">Table 6</xref>
shows the document type of these images and the total number of contour pixels. We used these large-sized images because they have various types of contours, which is useful when comparing the efficiencies with regard to parameters, such as processing time and the accuracy of the trace results of the contour-tracing algorithms.</p>
<p>In order to compare the proposed algorithm to the conventional algorithms, we used the experimental method described in [
<xref rid="B18-sensors-16-00353" ref-type="bibr">18</xref>
] to determine the start pixels of the outer and inner contours of the images. In other words, whenever any untraced contour pixel is searched using a raster scan from the left top to the right bottom of the images, this pixel is regarded as the start pixel, and the tracer starts contour tracing. If the contour is an outer contour, the tracer’s initial direction is assigned as east (“E”). On the contrary, in the case of the inner contour of an object, e.g., “e,” “p,” “q,” “R” and “o,” the tracer’s initial direction is assigned as west (“W”).</p>
<p>In the experiments, we did not consider the TPA because the initial condition of the TPA is that it must start with white left (“L”), left-rear (“W”) and right-rear (“R”) pixels [
<xref rid="B22-sensors-16-00353" ref-type="bibr">22</xref>
], which is not satisfied in some of the inner contours.
<xref ref-type="fig" rid="sensors-16-00353-f015">Figure 15</xref>
shows an example of this violation. In our experiments, there were many cases for which these conditions were not satisfied. Therefore, we could not perform identical experiments, and meaningful data were not obtained for comparing the trace results with those of the other methods.</p>
<sec id="sec5dot1-sensors-16-00353">
<title>5.1. Accuracy</title>
<p>The accuracy of contour tracing involves determining how accurately the tracing algorithm traces, and we measure it by counting the number of pixels traced. First, we apply each algorithm to the test images and mark the tracing on the images. Then, we count all of the marked contour pixels in the images. Therefore, even if a pixel is traced several times, it is counted only once.
<xref ref-type="table" rid="sensors-16-00353-t007">Table 7</xref>
shows the results of the comparison between the proposed algorithm and the conventional ones. In the table, “total number” implies the total number of ground truth contour pixels, including the inner corner, outer corner, inner-outer corner and straight-line pixels. The ground truth pixels are counted that are adjacent to the background pixels. In this result, MNT and RSA traced the least number of pixels as contours, because they could not trace the inner-corner pixels. SBF has inconsistencies with regard to the inner-outer corner and inner-corner types. Therefore, it traced fewer pixels when compared to ISBF and the proposed algorithm. Further, MSBF has inner-corner inconsistencies that are similar to those of SBF, and MSBF traced fewer pixels when compared to the proposed algorithm and ISBF. The proposed algorithm shows that
<inline-formula>
<mml:math id="mm138">
<mml:mrow>
<mml:mn>99</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>%</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
of the total contour pixels were found to be the same as those in the case of ISBF, and it has the maximum total number of traced contour pixels. In conclusion, the proposed algorithm produced the best results with regard to tracing accuracy.</p>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f016">Figure 16</xref>
shows the traced images resulting from MSBF and the proposed algorithm. As shown in
<xref ref-type="fig" rid="sensors-16-00353-f016">Figure 16</xref>
a, MSBF was not able to trace some of the inner corner pixels, but our proposed method (
<xref ref-type="fig" rid="sensors-16-00353-f016">Figure 16</xref>
b) was able to trace all of the corner-pixel types without any inconsistency. Moreover, as the proposed algorithm can classify each corner type, it can trace the selected type of contour pixels by omitting some cases, as shown in
<xref ref-type="fig" rid="sensors-16-00353-f009">Figure 9</xref>
b. For example, if we remove the tracing Cases (1) and (6) from the other cases, we can obtain a result without inner-corner tracing, and it is the same as the result of MNT and RSA.
<xref ref-type="fig" rid="sensors-16-00353-f017">Figure 17</xref>
b shows an image that was traced using the proposed algorithm without inner corners, and it shows that the image is consistently traced without inner corners.</p>
</sec>
<sec id="sec5dot2-sensors-16-00353">
<title>5.2. Speed</title>
<p>In order to measure the tracing time for each algorithm, we performed each algorithm 20 times per image and calculated the average time. We used the cv2.getTickCount() function supported by OpenCV 3.0.0 to measure the processing time.
<xref ref-type="table" rid="sensors-16-00353-t008">Table 8</xref>
shows the average processing time of each algorithm used for tracing the images and a linear model for estimating the process time as the number of traced pixels increases using the least-square estimation (LSE) method. In the table, we obtain the average processing time per traced contour pixel by dividing the total processing time by the total number of traced contour pixels.</p>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f018">Figure 18</xref>
illustrates a graph that uses data from
<xref ref-type="table" rid="sensors-16-00353-t007">Table 7</xref>
. As shown in
<xref ref-type="fig" rid="sensors-16-00353-f018">Figure 18</xref>
, the proposed algorithm has the best performance,
<italic>i.e.</italic>
, it had the least average processing time and showed the smallest increase in the ratio of the process time to the number of traced contour pixels, as shown in the LSE. In particular, although the proposed algorithm traced most of the contour pixels in each image, it has the best or a good performance when compared to the conventional algorithms. Furthermore, the proposed algorithm shows better standard deviation results than the conventional algorithms. Therefore, the proposed algorithm has better performance than the other algorithms for the number of traced contour pixels and the processing time.</p>
</sec>
<sec id="sec5dot3-sensors-16-00353">
<title>5.3. Reduced Memory</title>
<p>The proposed algorithm does not save all of the contour pixels, but it saves only the representative points and the inner-outer corner pixels.
<xref ref-type="table" rid="sensors-16-00353-t009">Table 9</xref>
shows the data size acquired from the above experiments performed using CCITT standard fax images. It shows the data sizes of traced contour pixels and their compressed data. The number of traced contour pixels (
<italic>A</italic>
), which are the same results from
<xref ref-type="table" rid="sensors-16-00353-t007">Table 7</xref>
, and
<italic>C</italic>
and
<italic>D</italic>
in the table indicate the number of representative points and inner-outer corner points of the traced contour pixels.
<italic>A</italic>
and
<italic>C</italic>
are the number of
<inline-formula>
<mml:math id="mm139">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
coordinates, and
<italic>D</italic>
represents the number of inner-outer corners that comprise
<inline-formula>
<mml:math id="mm140">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
coordinates and the type of inner-outer corner. The benefit of storing only the representative points based on the vertex of the contour pixel is that it can significantly reduce the data size. The experimental results obtained show that the proposed algorithm reduced the data size to 19%–60% of the memory used when all of the contour pixels were stored, as shown in
<xref ref-type="table" rid="sensors-16-00353-t009">Table 9</xref>
.</p>
</sec>
<sec id="sec5dot4-sensors-16-00353">
<title>5.4. Restoration</title>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f019">Figure 19</xref>
shows an example of the retrieval points and a restoration result obtained using the proposed restoration algorithm.
<xref ref-type="fig" rid="sensors-16-00353-f019">Figure 19</xref>
a is an example image that has all of the contour pixel types, and it depicts the representative points and inner-outer corner points for contour description and restoration. This image has two contours, namely an outer contour and an inner contour that includes two inner-outer corners.
<xref ref-type="table" rid="sensors-16-00353-t010">Table 10</xref>
describes these data, and
<xref ref-type="fig" rid="sensors-16-00353-f019">Figure 19</xref>
b shows the restoration results, which were retrieved using the data from
<xref ref-type="table" rid="sensors-16-00353-t010">Table 10</xref>
. In the figure, the restored contour accurately represents the original contour pixels.</p>
<p>
<xref ref-type="fig" rid="sensors-16-00353-f020">Figure 20</xref>
shows the result obtained for the CCITT #1 image using the proposed restoration algorithm.
<xref ref-type="fig" rid="sensors-16-00353-f020">Figure 20</xref>
a represents the contour-tracing result, and
<xref ref-type="fig" rid="sensors-16-00353-f020">Figure 20</xref>
b depicts the result of the restoration from the compressed contour data. To verify the identity, we compared the contour pixels of the two images and found that they are identical with regard to the number of contour pixels and the pixel coordinates,
<italic>i.e.</italic>
, the contour pixels in the restoration result are the same as the original contour pixels. As shown in
<xref ref-type="fig" rid="sensors-16-00353-f019">Figure 19</xref>
and
<xref ref-type="fig" rid="sensors-16-00353-f020">Figure 20</xref>
, these experiments proved that the proposed algorithm could trace the inner and outer contours. Further, it was able to store the results using less memory by storing only the representative points and inner-outer corner points instead of all of the contour pixels; moreover, it could correctly restore all of the contour pixels from the compressed data. Besides, as shown in [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
], compressed data based on vertex contours guarantee precise enlarging.</p>
</sec>
<sec id="sec5dot5-sensors-16-00353">
<title>5.5. Limitations</title>
<p>In the experiments, there were missing contour pixels that did not satisfy the experimental conditions described in [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
]. In
<xref ref-type="fig" rid="sensors-16-00353-f021">Figure 21</xref>
b,c, there are eight untraced contour pixels because the horizontal scan line cannot find a starting pixel for the contour under certain conditions. In other words, because the scan line seeks an untraced black pixel with an adjacent white pixel on the horizontal line, if the untraced contour pixel that is between two black pixels in the horizontal direction has an adjacent white pixel in the vertical and/or diagonal direction, the untraced contour pixel cannot be considered as the starting pixel. Therefore, as shown in
<xref ref-type="table" rid="sensors-16-00353-t007">Table 7</xref>
, the missing contour pixels remain after running the proposed algorithm, and the untraced contour pixels of other algorithms are included in the missing contour pixels for the same reason. In particular, Image #9 has the largest number of missing contour pixels because it has many one-pixel-sized chessboard patterns that comprise inner-outer corner pixels. The chessboard pattern consists of one-pixel-sized inner-outer corner pixels, which tend to cause the missing start-pixel problem.</p>
<p>To overcome the problem, we applied an eight-connection mask to the images to obtain the starting pixel, but the mask required many operations. In other words, we attempted to measure the performance of multi-direction scanning in order to eliminate the missing contour-pixel problem by using vertical and horizontal scans instead of an eight-connection mask operation.
<xref ref-type="table" rid="sensors-16-00353-t011">Table 11</xref>
shows the increase in the number of pixels traced using bidirectional scanning, and
<xref ref-type="table" rid="sensors-16-00353-t012">Table 12</xref>
describes the processing time for this method. Moreover,
<xref ref-type="fig" rid="sensors-16-00353-f022">Figure 22</xref>
shows the tracing result that was obtained using the proposed algorithm based on bidirectional scanning, and it shows that seven of the missing pixels are traced, but one diagonal connective-contour pixel remained untraced.</p>
<p>In the above tables, bidirectional scanning slightly increases the number of traced contour pixels, but their processing time increases significantly. Moreover, the proposed algorithm shows acceptable performance in terms of accuracy
<inline-formula>
<mml:math id="mm141">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>99</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>5</mml:mn>
<mml:mo>%</mml:mo>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
, although we performed only unidirectional scanning. Hence, unidirectional scanning based on the proposed algorithm is sufficient for the application to contour tracing under the condition that relatively few objects are present, and we performed real-time tracing, such as AR, MR and recognition-image-based code on small-scale images, such as those in a mobile computing environment.</p>
</sec>
</sec>
<sec id="sec6-sensors-16-00353">
<title>6. Conclusions</title>
<p>In this paper, we proposed a contour-tracing algorithm to trace contours in low-performance devices, such as mobile phones, PDAs and embedded devices that have a processor with limited computational capability and a small memory capacity. The proposed algorithm traces contour pixels based on the pixel-following method, and it can also convert the contour information to compressed data and accurately restore it to the original contour using the vertex-following method. The proposed algorithm repeatedly executes the two tracing stages. First, the tracer moves to the next pixel based on its left and left-rear pixels. Next, it moves based on the front and front-left pixels. With these two tracing stages, the proposed algorithm extracts two contiguous contour pixels together. Because the proposed algorithm traces contiguous pixel pairs in a single step, there are more possible cases of the form a contour can take. Therefore, the classification of the contour is more complicated than the conventional algorithms. On the other hand, this classification actually takes less time to compute, because it reduces the duplicated detection of the background pixels. Moreover, based on the classified cases, we can determine the representative points and the inner-outer corner points that are based on the coordinates of the vertices, and we can store the contour data as points in order to reduce the data size. In addition, we proposed a restoration algorithm to retrieve all of the contour pixels from the representative points and the inner-outer corner points. The proposed algorithm performs accurate restoration, and it can restore the inner-outer corners that were not considered in conventional algorithms, such as the RD code method and the PXY method. Another characteristic of the proposed algorithm is that it can trace the desired type of connectivity because it is able to distinguish between the different types of connections of the contour pixels. For example, the proposed algorithm may trace without inner corners, which is similar to the performances of MNT and RSA.</p>
<p>We performed experiments with regard to three aspects: accuracy, speed and saving data. From the experiment results, the proposed algorithm had the best performance with regard to the accuracy of contour tracing,
<italic>i.e.</italic>
, of all the algorithms, it traced the largest number of contour pixels. Moreover, it had the smallest average processing time per contour pixel and good performance with respect to the processing time of each image and the LSE. For this reason, it is considered to have reasonable performance, and based on its accuracy and processing time, it is regarded as the best of the different algorithms. In addition to the accuracy and speed, the proposed algorithm exhibited good performance with regard to the memory consumption. It stored only the representative points and inner-outer corner points, thus reducing the memory consumption. Besides, the proposed restoration algorithm successfully retrieved all of the contour pixels from the compressed data. Therefore, the proposed algorithm shows improved accuracy and fast processing of contour tracing, low memory consumption for saving the contour and good restoration ability.</p>
</sec>
</body>
<back>
<ack>
<title>Acknowledgments</title>
<p>This work was supported by the National Research Foundation of Korea (NRF) grant funded by the Korea government (MEST) (No. NRF-2012R1A2A2A01014499 and NRF-2015R1A2A1A10055673).</p>
</ack>
<notes>
<title>Author Contributions</title>
<p>Jonghoon Seo contributed to the design of the contour following algorithm and the implementation of the proposed algorithm. Seungho Chae contributed to the design of the contour restoration method and was in charge of the experiment process. Jinwook Shim and Dongchul Kim contributed to the writing and revising of the paper. Cheolho Cheong guided the conventional contour following algorithms and helped to design the proposed algorithm. Tack-Don Han guided the research direction and verified the research results. All authors made substantial contributions to the writing and revision of the paper.</p>
</notes>
<notes>
<title>Conflicts of Interest</title>
<p>The authors declare no conflict of interest.</p>
</notes>
<ref-list>
<title>References</title>
<ref id="B1-sensors-16-00353">
<label>1.</label>
<element-citation publication-type="patent">
<person-group person-group-type="author">
<name>
<surname>Mcqueen</surname>
<given-names>W.A.</given-names>
</name>
</person-group>
<article-title>Contour tracing and boundary detection for object identification in a digital image</article-title>
<source>U.S. Patent</source>
<patent>6674904</patent>
<day>6</day>
<month>1</month>
<year>2004</year>
</element-citation>
</ref>
<ref id="B2-sensors-16-00353">
<label>2.</label>
<element-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Pratt</surname>
<given-names>W.</given-names>
</name>
</person-group>
<source>Digital Image Processing</source>
<publisher-name>Wiley & Sons</publisher-name>
<publisher-loc>Hoboken, NJ, USA</publisher-loc>
<year>1978</year>
</element-citation>
</ref>
<ref id="B3-sensors-16-00353">
<label>3.</label>
<element-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Gose</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Johnsonbaugh</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Jost</surname>
<given-names>S.</given-names>
</name>
</person-group>
<source>Pattern Recognition and Image Analysis</source>
<publisher-name>Prentice-Hall, Inc.</publisher-name>
<publisher-loc>Upper Saddle River, NJ, USA</publisher-loc>
<year>1996</year>
</element-citation>
</ref>
<ref id="B4-sensors-16-00353">
<label>4.</label>
<element-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Pitas</surname>
<given-names>I.</given-names>
</name>
</person-group>
<source>Digital Image Processing Algorithms and Applications</source>
<publisher-name>Wiley & Sons</publisher-name>
<publisher-loc>Hoboken, NJ, USA</publisher-loc>
<year>2000</year>
</element-citation>
</ref>
<ref id="B5-sensors-16-00353">
<label>5.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Das</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Paulik</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Loh</surname>
<given-names>N.</given-names>
</name>
</person-group>
<article-title>A bivariate autoregressive technique for analysis and classification of planar shapes</article-title>
<source>IEEE Trans. Pattern Anal. Mach. Intell.</source>
<year>1990</year>
<volume>12</volume>
<fpage>97</fpage>
<lpage>103</lpage>
<pub-id pub-id-type="doi">10.1109/34.41389</pub-id>
</element-citation>
</ref>
<ref id="B6-sensors-16-00353">
<label>6.</label>
<element-citation publication-type="webpage">
<person-group person-group-type="author">
<name>
<surname>Papert</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>Uses of Technology to Enhance Education</article-title>
<comment>Available online:
<ext-link ext-link-type="uri" xlink:href="http://hdl.handle.net/1721.1/6213">http://hdl.handle.net/1721.1/6213</ext-link>
</comment>
<date-in-citation>(accessed on 16 August 2015)</date-in-citation>
</element-citation>
</ref>
<ref id="B7-sensors-16-00353">
<label>7.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cheong</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Han</surname>
<given-names>T.D.</given-names>
</name>
</person-group>
<article-title>Improved simple boundary following algorithm</article-title>
<source>J. Korea Inf. Sci. Soc. Softw. Appl.</source>
<year>2006</year>
<volume>33</volume>
<fpage>427</fpage>
<lpage>439</lpage>
</element-citation>
</ref>
<ref id="B8-sensors-16-00353">
<label>8.</label>
<element-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Pavlidis</surname>
<given-names>T.</given-names>
</name>
</person-group>
<source>Algorithms for Graphics and Image Processing</source>
<publisher-name>Springer-Verlag</publisher-name>
<publisher-loc>Berlin, Germany</publisher-loc>
<year>2012</year>
</element-citation>
</ref>
<ref id="B9-sensors-16-00353">
<label>9.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Reddy</surname>
<given-names>P.R.</given-names>
</name>
<name>
<surname>Amarnadh</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Bhaskar</surname>
<given-names>M.</given-names>
</name>
</person-group>
<article-title>Evaluation of stopping criterion in contour tracing algorithms</article-title>
<source>Int. J. Comput. Sci. Inf. Technol.</source>
<year>2012</year>
<volume>3</volume>
<fpage>3888</fpage>
<lpage>3894</lpage>
</element-citation>
</ref>
<ref id="B10-sensors-16-00353">
<label>10.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Aroca</surname>
<given-names>R.V.</given-names>
</name>
<name>
<surname>Gomes</surname>
<given-names>R.B.</given-names>
</name>
<name>
<surname>Dantas</surname>
<given-names>R.R.</given-names>
</name>
<name>
<surname>Calbo</surname>
<given-names>A.G.</given-names>
</name>
<name>
<surname>Gonçalves</surname>
<given-names>L.M.G.</given-names>
</name>
</person-group>
<article-title>A Wearable Mobile Sensor Platform to Assist Fruit Grading</article-title>
<source>Sensors</source>
<year>2013</year>
<volume>13</volume>
<fpage>6109</fpage>
<lpage>6140</lpage>
<pub-id pub-id-type="doi">10.3390/s130506109</pub-id>
<pub-id pub-id-type="pmid">23666134</pub-id>
</element-citation>
</ref>
<ref id="B11-sensors-16-00353">
<label>11.</label>
<element-citation publication-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Wakaumi</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Nagasawa</surname>
<given-names>C.</given-names>
</name>
</person-group>
<article-title>A 2D Ternary Barcode Detection System with a Dual Threshold</article-title>
<source>Proceedings of the 5th IEEE Conference on Sensors</source>
<conf-loc>Daegu, Korea</conf-loc>
<conf-date>22–25 October 2006</conf-date>
<fpage>1511</fpage>
<lpage>1514</lpage>
</element-citation>
</ref>
<ref id="B12-sensors-16-00353">
<label>12.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Brodić</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Milivojević</surname>
<given-names>D.R.</given-names>
</name>
<name>
<surname>Milivojević</surname>
<given-names>Z.</given-names>
</name>
</person-group>
<article-title>Basic Test Framework for the Evaluation of Text Line Segmentation and Text Parameter Extraction</article-title>
<source>Sensors</source>
<year>2010</year>
<volume>10</volume>
<fpage>5263</fpage>
<lpage>5279</lpage>
<pub-id pub-id-type="doi">10.3390/s100505263</pub-id>
<pub-id pub-id-type="pmid">22399932</pub-id>
</element-citation>
</ref>
<ref id="B13-sensors-16-00353">
<label>13.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kim</surname>
<given-names>J.H.</given-names>
</name>
<name>
<surname>Seo</surname>
<given-names>K.S.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>J.</given-names>
</name>
</person-group>
<article-title>Rapid diagnostic barcode system for codetection of multiple protein markers</article-title>
<source>IEEE Sens. J.</source>
<year>2006</year>
<volume>6</volume>
<fpage>248</fpage>
<lpage>253</lpage>
</element-citation>
</ref>
<ref id="B14-sensors-16-00353">
<label>14.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Tian</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Guan</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>C.</given-names>
</name>
</person-group>
<article-title>Real-Time Occlusion Handling in Augmented Reality Based on an Object Tracking Approach</article-title>
<source>Sensors</source>
<year>2010</year>
<volume>10</volume>
<fpage>2885</fpage>
<lpage>2900</lpage>
<pub-id pub-id-type="doi">10.3390/s100402885</pub-id>
<pub-id pub-id-type="pmid">22319278</pub-id>
</element-citation>
</ref>
<ref id="B15-sensors-16-00353">
<label>15.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Zhao</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Lei</surname>
<given-names>B.</given-names>
</name>
</person-group>
<article-title>Robust Facial Expression Recognition via Compressive Sensing</article-title>
<source>Sensors</source>
<year>2012</year>
<volume>12</volume>
<fpage>3747</fpage>
<lpage>3761</lpage>
<pub-id pub-id-type="doi">10.3390/s120303747</pub-id>
<pub-id pub-id-type="pmid">22737035</pub-id>
</element-citation>
</ref>
<ref id="B16-sensors-16-00353">
<label>16.</label>
<element-citation publication-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Cheong</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Seo</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Han</surname>
<given-names>T.D.</given-names>
</name>
</person-group>
<article-title>Advanced contour tracing algorithms based on analysis of tracing conditions</article-title>
<source>Proceedings of the 33rd KISS Fall Conference</source>
<conf-loc>Seoul, Korea</conf-loc>
<conf-date>20–21 October 2006</conf-date>
<volume>Volume 33</volume>
<fpage>431</fpage>
<lpage>436</lpage>
</element-citation>
</ref>
<ref id="B17-sensors-16-00353">
<label>17.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Miyatake</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Matsushima</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Ejiri</surname>
<given-names>M.</given-names>
</name>
</person-group>
<article-title>Contour representation of binary images using run-type direction codes</article-title>
<source>Mach. Vis. Appl.</source>
<year>1997</year>
<volume>9</volume>
<fpage>193</fpage>
<lpage>200</lpage>
<pub-id pub-id-type="doi">10.1007/s001380050040</pub-id>
</element-citation>
</ref>
<ref id="B18-sensors-16-00353">
<label>18.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Danielsson</surname>
<given-names>P.E.</given-names>
</name>
</person-group>
<article-title>An improvement of Kruse’s segmentation algorithm</article-title>
<source>Comput. Graph. Image Proc.</source>
<year>1981</year>
<volume>17</volume>
<fpage>394</fpage>
<lpage>396</lpage>
<pub-id pub-id-type="doi">10.1016/0146-664X(81)90017-4</pub-id>
</element-citation>
</ref>
<ref id="B19-sensors-16-00353">
<label>19.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Shoji</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Miyamichi</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Hirano</surname>
<given-names>K.</given-names>
</name>
</person-group>
<article-title>Contour following and reconstruction of binary images stored in run format</article-title>
<source>Syst. Comput. Jpn.</source>
<year>1999</year>
<volume>30</volume>
<fpage>1</fpage>
<lpage>11</lpage>
<pub-id pub-id-type="doi">10.1002/(SICI)1520-684X(199910)30:11<1::AID-SCJ1>3.0.CO;2-S</pub-id>
</element-citation>
</ref>
<ref id="B20-sensors-16-00353">
<label>20.</label>
<element-citation publication-type="webpage">
<person-group person-group-type="author">
<name>
<surname>Toussaint</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>Grids, Connectivity and Contour Tracing</article-title>
<comment>Available online:
<ext-link ext-link-type="uri" xlink:href="http://www-cgrl.cs.mcgill.ca/~godfried/teaching/pr-notes/contour.ps">http://www-cgrl.cs.mcgill.ca/~godfried/teaching/pr-notes/contour.ps</ext-link>
</comment>
<date-in-citation>(accessed on 26 August 2015)</date-in-citation>
</element-citation>
</ref>
<ref id="B21-sensors-16-00353">
<label>21.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Suzuki</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Abe</surname>
<given-names>K.</given-names>
</name>
</person-group>
<article-title>Topological structural analysis of digitized binary images by border following</article-title>
<source>Comput. Vis. Graph. Image Proc.</source>
<year>1985</year>
<volume>30</volume>
<fpage>32</fpage>
<lpage>46</lpage>
<pub-id pub-id-type="doi">10.1016/0734-189X(85)90016-7</pub-id>
</element-citation>
</ref>
<ref id="B22-sensors-16-00353">
<label>22.</label>
<element-citation publication-type="webpage">
<person-group person-group-type="author">
<name>
<surname>Ghuneim</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>Contour Tracing</article-title>
<year>2015</year>
<comment>Available online:
<ext-link ext-link-type="uri" xlink:href="http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/index.html">http://www.imageprocessingplace.com/downloads_V3/root_downloads/tutorials/contour_tracing_Abeer_George_Ghuneim/index.html</ext-link>
</comment>
<date-in-citation>(accessed on 28 August 2015)</date-in-citation>
</element-citation>
</ref>
</ref-list>
</back>
<floats-group>
<fig id="sensors-16-00353-f001" position="float">
<label>Figure 1</label>
<caption>
<p>Category of contour tracing algorithms. (
<bold>a</bold>
) Pixel-following algorithm; (
<bold>b</bold>
) vertex-following algorithm; (
<bold>c</bold>
) run-data-based following algorithm.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g001"></graphic>
</fig>
<fig id="sensors-16-00353-f002" position="float">
<label>Figure 2</label>
<caption>
<p>Directions and types of contour pixels. (
<bold>a</bold>
) Absolute direction
<italic>d</italic>
; (
<bold>b</bold>
) relative direction
<italic>r</italic>
; (
<bold>c</bold>
) types of contour pixels: inner corner pixel (
<italic>I</italic>
), outer corner pixel (
<italic>O</italic>
) and inner-outer corner pixel (
<inline-formula>
<mml:math id="mm142">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
).</p>
</caption>
<graphic xlink:href="sensors-16-00353-g002"></graphic>
</fig>
<fig id="sensors-16-00353-f003" position="float">
<label>Figure 3</label>
<caption>
<p>Detour of the inner-outer corner at the left-rear pixel (modified version of [
<xref rid="B3-sensors-16-00353" ref-type="bibr">3</xref>
]). (
<bold>a</bold>
) Simple boundary follower (SBF); (
<bold>b</bold>
) modified SBF (MSBF).</p>
</caption>
<graphic xlink:href="sensors-16-00353-g003"></graphic>
</fig>
<fig id="sensors-16-00353-f004" position="float">
<label>Figure 4</label>
<caption>
<p>Contour cases of the improved SBF (ISBF) [
<xref rid="B16-sensors-16-00353" ref-type="bibr">16</xref>
]: (
<bold>a</bold>
) left neighbor; (
<bold>b</bold>
) inner-outer corner at the left-rear; (
<bold>c</bold>
) inner-outer corner at the front-left; (
<bold>d</bold>
) inner corner at the front; (
<bold>e</bold>
) front neighbor; (
<bold>f</bold>
) outer corner. Reproduced with permission from [
<xref rid="B16-sensors-16-00353" ref-type="bibr">16</xref>
].</p>
</caption>
<graphic xlink:href="sensors-16-00353-g004"></graphic>
</fig>
<fig id="sensors-16-00353-f005" position="float">
<label>Figure 5</label>
<caption>
<p>Contour-following sequence of Moore-neighbor tracing (MNT) and the radial sweep algorithm (RSA): (
<bold>a</bold>
) MNT [
<xref rid="B20-sensors-16-00353" ref-type="bibr">20</xref>
]; (
<bold>b</bold>
) RSA [
<xref rid="B9-sensors-16-00353" ref-type="bibr">9</xref>
].</p>
</caption>
<graphic xlink:href="sensors-16-00353-g005"></graphic>
</fig>
<fig id="sensors-16-00353-f006" position="float">
<label>Figure 6</label>
<caption>
<p>Contour-following sequence of the Theo Pavlidis algorithm (TPA) [
<xref rid="B16-sensors-16-00353" ref-type="bibr">16</xref>
]. (
<bold>a</bold>
) Front-left contour; (
<bold>b</bold>
) front contour; (
<bold>c</bold>
) front-right contour; (
<bold>d</bold>
) rotation.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g006"></graphic>
</fig>
<fig id="sensors-16-00353-f007" position="float">
<label>Figure 7</label>
<caption>
<p>Representative points for data compression. (
<bold>a</bold>
) Representative points [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
]; (
<bold>b</bold>
) cases of representative points.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g007"></graphic>
</fig>
<fig id="sensors-16-00353-f008" position="float">
<label>Figure 8</label>
<caption>
<p>Comparison of conventional contour pixel-following algorithms: (
<bold>a</bold>
) SBF; (
<bold>b</bold>
) MSBF; (
<bold>c</bold>
) ISBF; (
<bold>d</bold>
) MNT; (
<bold>e</bold>
) RSA; (
<bold>f</bold>
) TPA.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g008"></graphic>
</fig>
<fig id="sensors-16-00353-f009" position="float">
<label>Figure 9</label>
<caption>
<p>Contour tracing cases for the proposed contour-following algorithm. (
<bold>a</bold>
) Adjacent pixels; (
<bold>b</bold>
) contour cases.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g009"></graphic>
</fig>
<fig id="sensors-16-00353-f010" position="float">
<label>Figure 10</label>
<caption>
<p>State transition of automation for the proposed algorithm.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g010"></graphic>
</fig>
<fig id="sensors-16-00353-f011" position="float">
<label>Figure 11</label>
<caption>
<p>Result of contour tracing using the proposed algorithm.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g011"></graphic>
</fig>
<fig id="sensors-16-00353-f012" position="float">
<label>Figure 12</label>
<caption>
<p>Contour pixel reconstruction. (
<bold>a</bold>
) Representative points and inner-outer corner points; (
<bold>b</bold>
) cases of the proposed algorithm.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g012"></graphic>
</fig>
<fig id="sensors-16-00353-f013" position="float">
<label>Figure 13</label>
<caption>
<p>Contour pixel reconstruction. (
<bold>a</bold>
) SE; (
<bold>b</bold>
) NW; (
<bold>c</bold>
) SW; (
<bold>d</bold>
) NE.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g013"></graphic>
</fig>
<fig id="sensors-16-00353-f014" position="float">
<label>Figure 14</label>
<caption>
<p>Restoration cases for different sequences of representation points. (
<bold>a</bold>
<bold>h</bold>
) Case 1–8.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g014"></graphic>
</fig>
<fig id="sensors-16-00353-f015" position="float">
<label>Figure 15</label>
<caption>
<p>Problem with TPA. TPA must start with white left (L), left-rear (W) and right-rear (R) pixels. However, generic inner contours cannot satisfy these criteria.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g015"></graphic>
</fig>
<fig id="sensors-16-00353-f016" position="float">
<label>Figure 16</label>
<caption>
<p>Visual comparison of two contour-tracing methods. (
<bold>a</bold>
) MSBF; (
<bold>b</bold>
) the proposed method.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g016"></graphic>
</fig>
<fig id="sensors-16-00353-f017" position="float">
<label>Figure 17</label>
<caption>
<p>Visual comparison of two contour-tracing methods. (
<bold>a</bold>
) MNT; (
<bold>b</bold>
) the proposed method (without inner corners).</p>
</caption>
<graphic xlink:href="sensors-16-00353-g017"></graphic>
</fig>
<fig id="sensors-16-00353-f018" position="float">
<label>Figure 18</label>
<caption>
<p>Comparison of tracing times of the contour-tracing algorithms. (
<bold>a</bold>
) Processing time
<italic>vs.</italic>
the number of contour pixels; (
<bold>b</bold>
) average contour tracing time
<italic>vs.</italic>
images.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g018"></graphic>
</fig>
<fig id="sensors-16-00353-f019" position="float">
<label>Figure 19</label>
<caption>
<p>Example of the restoration of contour pixels. (
<bold>a</bold>
) The original image and its saved points for restoration; (
<bold>b</bold>
) restoration by the saved data.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g019"></graphic>
</fig>
<fig id="sensors-16-00353-f020" position="float">
<label>Figure 20</label>
<caption>
<p>Result of the experiment for CCITT #1. Contour pixels are shown in black, original image pixels in grey. (
<bold>a</bold>
) Result of contour tracing; (
<bold>b</bold>
) result of contour restoration.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g020"></graphic>
</fig>
<fig id="sensors-16-00353-f021" position="float">
<label>Figure 21</label>
<caption>
<p>Example of untraced contour pixels caused by missing starting pixel CCITT Image #9 From
<inline-formula>
<mml:math id="mm143">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>1093</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1766</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
to
<inline-formula>
<mml:math id="mm144">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>1108</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>1780</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
. (
<bold>a</bold>
) Original image; (
<bold>b</bold>
) traced by ISBF; (
<bold>c</bold>
) traced by the proposed algorithm.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g021"></graphic>
</fig>
<fig id="sensors-16-00353-f022" position="float">
<label>Figure 22</label>
<caption>
<p>Result of the proposed algorithm by using bidirectional scanning.</p>
</caption>
<graphic xlink:href="sensors-16-00353-g022"></graphic>
</fig>
<table-wrap id="sensors-16-00353-t001" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t001_Table 1</object-id>
<label>Table 1</label>
<caption>
<p>Comparison of contour-following algorithms.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="top" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1"></th>
<th align="center" valign="top" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Pixel-Following Method</th>
<th align="center" valign="top" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Vertex-Following Method</th>
<th align="center" valign="top" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Run-Data-Based Following Method</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Traced object</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Contour pixel</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Vertex of contour (pixel corner)</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Run-data</td>
</tr>
<tr>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Data construction</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Coordinates of contour pixels obtained using traced sequence (automatically)</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Coordinates of vertices of contour pixels obtained using traced sequence (automatically)</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">All run-data of image and run-following relationship data (additive operation for calculating the relationship between adjacent run-data horizontally)</td>
</tr>
<tr>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Adaptive application [
<xref rid="B17-sensors-16-00353" ref-type="bibr">17</xref>
]</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Small-scale image Slow trace is allowed</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Small-scale image Slow trace is allowed</td>
<td align="center" valign="top" style="border-bottom:solid thin" rowspan="1" colspan="1">Large-scale image, such as document recognition</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t002" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t002_Table 2</object-id>
<label>Table 2</label>
<caption>
<p>Result table of the proposed contour tracing.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">
<inline-formula>
<mml:math id="mm145">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>c</mml:mi>
<mml:mi>e</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">P</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">
<inline-formula>
<mml:math id="mm146">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>d</mml:mi>
<mml:mi>e</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Outer</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Inner</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Outer</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Inner</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Outer</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Straight</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Straight</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Inner-outer</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Inner-outer</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">10</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Outer</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">11</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t003" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t003_Table 3</object-id>
<label>Table 3</label>
<caption>
<p>Data structure of the proposed contour tracer.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Representative Points (
<inline-formula>
<mml:math id="mm147">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
)</th>
<th colspan="3" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Inner-Outer Corner (
<inline-formula>
<mml:math id="mm148">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
)</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Type</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm149">
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm150">
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm151">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm152">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm153">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm154">
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm155">
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm156">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm157">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm158">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">...</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">...</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">...</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">...</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">...</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t004" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t004_Table 4</object-id>
<label>Table 4</label>
<caption>
<p>Examples of the inner corner missing.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Case</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm159">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm160">
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SE</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NE</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SE</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SE</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NE</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SW</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NE</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NW</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NW</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NW</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NW</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SW</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SW</td>
<td align="center" valign="middle" rowspan="1" colspan="1">SE</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SW</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">NE</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t005" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t005_Table 5</object-id>
<label>Table 5</label>
<caption>
<p>Experimental environment.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="left" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1"></th>
<th align="left" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Desktop</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" valign="middle" rowspan="1" colspan="1">CPU</td>
<td align="left" valign="middle" rowspan="1" colspan="1">Intel®  Core™ i7-2600K CPU @3.40 GHz</td>
</tr>
<tr>
<td align="left" valign="middle" rowspan="1" colspan="1">Memory</td>
<td align="left" valign="middle" rowspan="1" colspan="1">14.0 GB</td>
</tr>
<tr>
<td align="left" valign="middle" rowspan="1" colspan="1">HDD</td>
<td align="left" valign="middle" rowspan="1" colspan="1">Seagate 1 TB Momentus ST1000LM024</td>
</tr>
<tr>
<td align="left" valign="middle" rowspan="1" colspan="1">OS</td>
<td align="left" valign="middle" rowspan="1" colspan="1">Microsoft Windows 7</td>
</tr>
<tr>
<td align="left" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Development</td>
<td align="left" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Microsoft Visual Studio 2013</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t006" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t006_Table 6</object-id>
<label>Table 6</label>
<caption>
<p>CCITT (Consultative Committee for International Telephony and Telegraphy) fax standard images.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Index</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Type</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1" colspan="1">Total Number of Contour Pixels</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Business letter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">81,189</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Circuit diagram</td>
<td align="center" valign="middle" rowspan="1" colspan="1">50,825</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Sales order table</td>
<td align="center" valign="middle" rowspan="1" colspan="1">152,489</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">French document</td>
<td align="center" valign="middle" rowspan="1" colspan="1">312,812</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Technical paper</td>
<td align="center" valign="middle" rowspan="1" colspan="1">157,377</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Technical graph</td>
<td align="center" valign="middle" rowspan="1" colspan="1">98,579</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Japanese document</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,717</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Handwritten memo</td>
<td align="center" valign="middle" rowspan="1" colspan="1">97,031</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">9</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Facsimile test chart</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">453,721</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t007" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t007_Table 7</object-id>
<label>Table 7</label>
<caption>
<p>Comparison of traced contour pixels.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">Image</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">Total Number</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Proposed</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">ISBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MSBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">SBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MNT</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">RSA</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">81,189</td>
<td align="center" valign="middle" rowspan="1" colspan="1">81,188</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">81,188</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">73,743</td>
<td align="center" valign="middle" rowspan="1" colspan="1">90.8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">73,613</td>
<td align="center" valign="middle" rowspan="1" colspan="1">90.7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">65,503</td>
<td align="center" valign="middle" rowspan="1" colspan="1">80.7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">65,503</td>
<td align="center" valign="middle" rowspan="1" colspan="1">80.7</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">50,825</td>
<td align="center" valign="middle" rowspan="1" colspan="1">50,824</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">50,824</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">45,003</td>
<td align="center" valign="middle" rowspan="1" colspan="1">88.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">45,003</td>
<td align="center" valign="middle" rowspan="1" colspan="1">88.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">38,819</td>
<td align="center" valign="middle" rowspan="1" colspan="1">76.4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">38,819</td>
<td align="center" valign="middle" rowspan="1" colspan="1">76.4</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">152,489</td>
<td align="center" valign="middle" rowspan="1" colspan="1">152,487</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">152,487</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">139,589</td>
<td align="center" valign="middle" rowspan="1" colspan="1">91.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">139,589</td>
<td align="center" valign="middle" rowspan="1" colspan="1">91.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">126,414</td>
<td align="center" valign="middle" rowspan="1" colspan="1">82.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">126,414</td>
<td align="center" valign="middle" rowspan="1" colspan="1">82.9</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">312,812</td>
<td align="center" valign="middle" rowspan="1" colspan="1">312,812</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">312,812</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,709</td>
<td align="center" valign="middle" rowspan="1" colspan="1">90.7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,712</td>
<td align="center" valign="middle" rowspan="1" colspan="1">90.7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">253,169</td>
<td align="center" valign="middle" rowspan="1" colspan="1">80.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">253,169</td>
<td align="center" valign="middle" rowspan="1" colspan="1">80.9</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">157,377</td>
<td align="center" valign="middle" rowspan="1" colspan="1">157,374</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">157,374</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">142,447</td>
<td align="center" valign="middle" rowspan="1" colspan="1">90.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">142,453</td>
<td align="center" valign="middle" rowspan="1" colspan="1">90.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">127,306</td>
<td align="center" valign="middle" rowspan="1" colspan="1">80.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">127,306</td>
<td align="center" valign="middle" rowspan="1" colspan="1">80.9</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">98,579</td>
<td align="center" valign="middle" rowspan="1" colspan="1">98,566</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">98,566</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">91,176</td>
<td align="center" valign="middle" rowspan="1" colspan="1">92.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">91,174</td>
<td align="center" valign="middle" rowspan="1" colspan="1">92.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">82,239</td>
<td align="center" valign="middle" rowspan="1" colspan="1">83.4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">82,239</td>
<td align="center" valign="middle" rowspan="1" colspan="1">83.4</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,717</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,551</td>
<td align="center" valign="middle" rowspan="1" colspan="1">99.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,551</td>
<td align="center" valign="middle" rowspan="1" colspan="1">99.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">264,108</td>
<td align="center" valign="middle" rowspan="1" colspan="1">93.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">264,067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">93.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">238,533</td>
<td align="center" valign="middle" rowspan="1" colspan="1">84.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">238,533</td>
<td align="center" valign="middle" rowspan="1" colspan="1">84.1</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">97,031</td>
<td align="center" valign="middle" rowspan="1" colspan="1">97,015</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">97,015</td>
<td align="center" valign="middle" rowspan="1" colspan="1">100.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">86,822</td>
<td align="center" valign="middle" rowspan="1" colspan="1">89.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">86,822</td>
<td align="center" valign="middle" rowspan="1" colspan="1">89.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">76,251</td>
<td align="center" valign="middle" rowspan="1" colspan="1">78.6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">76,251</td>
<td align="center" valign="middle" rowspan="1" colspan="1">78.6</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">#9</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">453,721</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">445,975</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">98.3</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">445,972</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">98.3</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">417,687</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">92.1</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">417,735</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">92.1</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">361,439</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">79.7</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">361,439</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">79.7</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Total</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,687,740</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,679,792</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">99.5</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,679,789</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">99.5</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,544,284</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">91.5</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,544,168</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">91.5</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,369,673</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">81.2</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,369,673</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">81.2</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t008" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t008_Table 8</object-id>
<label>Table 8</label>
<caption>
<p>Speed experimental result (units: seconds).</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">Image</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Proposed Algorithm</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">ISBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MSBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">SBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MNT</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">RSA</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mean</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SD</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mean</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SD</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mean</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SD</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mean</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SD</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mean</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SD</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mean</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">SD</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#1</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00596</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00032</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00622</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00069</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00658</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00074</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00626</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00060</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00626</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00054</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00750</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00058</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#2</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00432</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00040</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00562</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00047</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00592</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00005</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00468</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00044</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00472</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00026</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00560</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00034</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00778</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00046</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00808</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00036</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00936</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00085</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00752</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00069</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00808</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00033</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00940</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00066</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01406</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00006</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01500</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00099</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01844</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00100</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.01346</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00006</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.01374</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00075</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01842</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00074</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00848</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00038</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00908</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00080</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00086</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00866</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00054</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00842</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00075</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00065</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#6</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00592</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00056</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00684</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00074</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00750</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00070</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00658</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00062</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00624</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00072</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00686</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00058</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#7</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.01308</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00068</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01470</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00096</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01904</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00110</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01376</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00091</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01344</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00058</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01748</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00072</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00624</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00688</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00062</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00784</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00065</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00622</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00068</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00622</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00068</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.00656</td>
<td align="center" valign="middle" style="background:#D0D0D0" rowspan="1" colspan="1">0.00061</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">#9</td>
<td align="center" valign="middle" style="background:#D0D0D0;border-bottom:solid thin" rowspan="1" colspan="1">0.01656</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.00079</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01874</td>
<td align="center" valign="middle" style="background:#D0D0D0;border-bottom:solid thin" rowspan="1" colspan="1">0.00063</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.02628</td>
<td align="center" valign="middle" style="background:#D0D0D0;border-bottom:solid thin" rowspan="1" colspan="1">0.00053</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01778</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.00086</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01750</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.00089</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.02188</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.00093</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Average</td>
<td align="center" valign="middle" style="background:#D0D0D0;border-bottom:solid thin" rowspan="1" colspan="1">0.00916</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01013</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01233</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.00944</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.00940</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01152</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Average time per
<break></break>
traced contour pixel</td>
<td align="center" valign="middle" style="background:#D0D0D0;border-bottom:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm161">
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>91</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm162">
<mml:mrow>
<mml:mn>5</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>43</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm163">
<mml:mrow>
<mml:mn>7</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>19</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm164">
<mml:mrow>
<mml:mn>5</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>50</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm165">
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>18</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<inline-formula>
<mml:math id="mm166">
<mml:mrow>
<mml:mn>7</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>57</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">LSE</td>
<td colspan="2" align="center" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm167">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>23</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>0031</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td colspan="2" align="left" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm168">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>57</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>0035</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td colspan="2" align="left" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm169">
<mml:mrow>
<mml:mn>5</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>74</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>0025</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td colspan="2" align="left" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm170">
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>58</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>0033</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td colspan="2" align="left" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm171">
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>06</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>0032</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
<td colspan="2" align="left" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm172">
<mml:mrow>
<mml:mn>5</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>54</mml:mn>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mn>10</mml:mn>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>0031</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">R-square</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.98117</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.98544</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.98838</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.98685</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.99461</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.97615</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn>
<p>Results of best or faster speed/smaller standard deviation than the proposed algorithm are marked with a shadow.</p>
</fn>
</table-wrap-foot>
</table-wrap>
<table-wrap id="sensors-16-00353-t009" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t009_Table 9</object-id>
<label>Table 9</label>
<caption>
<p>Comparison between total contour pixels and representative points.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle" style="border-top:solid thin" rowspan="1" colspan="1"></th>
<th colspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1">Entire Contour Pixels</th>
<th colspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" rowspan="1">Compressed Data</th>
<th align="center" valign="middle" style="border-top:solid thin" rowspan="1" colspan="1">Ratio (%)
<break></break>
(
<inline-formula>
<mml:math id="mm173">
<mml:mrow>
<mml:mi>E</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>×</mml:mo>
<mml:mn>100</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
)</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number of contour pixels (
<italic>A</italic>
)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Data size
<break></break>
(
<inline-formula>
<mml:math id="mm174">
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>A</mml:mi>
<mml:mo>×</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number of representative points (
<italic>C</italic>
)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number of inner outer corner points (
<italic>D</italic>
)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Data size
<break></break>
(
<inline-formula>
<mml:math id="mm175">
<mml:mrow>
<mml:mi>E</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>×</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:math>
</inline-formula>
)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">81,188</td>
<td align="center" valign="middle" rowspan="1" colspan="1">162,376</td>
<td align="center" valign="middle" rowspan="1" colspan="1">21,206</td>
<td align="center" valign="middle" rowspan="1" colspan="1">61</td>
<td align="center" valign="middle" rowspan="1" colspan="1">42,595</td>
<td align="center" valign="middle" rowspan="1" colspan="1">26.23</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">50,824</td>
<td align="center" valign="middle" rowspan="1" colspan="1">101,648</td>
<td align="center" valign="middle" rowspan="1" colspan="1">12,695</td>
<td align="center" valign="middle" rowspan="1" colspan="1">21</td>
<td align="center" valign="middle" rowspan="1" colspan="1">25,453</td>
<td align="center" valign="middle" rowspan="1" colspan="1">25.04</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">152,487</td>
<td align="center" valign="middle" rowspan="1" colspan="1">304,974</td>
<td align="center" valign="middle" rowspan="1" colspan="1">30,181</td>
<td align="center" valign="middle" rowspan="1" colspan="1">53</td>
<td align="center" valign="middle" rowspan="1" colspan="1">60,521</td>
<td align="center" valign="middle" rowspan="1" colspan="1">19.84</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">312,812</td>
<td align="center" valign="middle" rowspan="1" colspan="1">625,624</td>
<td align="center" valign="middle" rowspan="1" colspan="1">86,953</td>
<td align="center" valign="middle" rowspan="1" colspan="1">442</td>
<td align="center" valign="middle" rowspan="1" colspan="1">175,232</td>
<td align="center" valign="middle" rowspan="1" colspan="1">28.01</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">157,374</td>
<td align="center" valign="middle" rowspan="1" colspan="1">314,748</td>
<td align="center" valign="middle" rowspan="1" colspan="1">37,386</td>
<td align="center" valign="middle" rowspan="1" colspan="1">113</td>
<td align="center" valign="middle" rowspan="1" colspan="1">75,111</td>
<td align="center" valign="middle" rowspan="1" colspan="1">23.86</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">98,566</td>
<td align="center" valign="middle" rowspan="1" colspan="1">197,132</td>
<td align="center" valign="middle" rowspan="1" colspan="1">18,464</td>
<td align="center" valign="middle" rowspan="1" colspan="1">104</td>
<td align="center" valign="middle" rowspan="1" colspan="1">37,240</td>
<td align="center" valign="middle" rowspan="1" colspan="1">18.89</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,551</td>
<td align="center" valign="middle" rowspan="1" colspan="1">567,102</td>
<td align="center" valign="middle" rowspan="1" colspan="1">84,484</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1,539</td>
<td align="center" valign="middle" rowspan="1" colspan="1">173,585</td>
<td align="center" valign="middle" rowspan="1" colspan="1">30.61</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">97,015</td>
<td align="center" valign="middle" rowspan="1" colspan="1">194,030</td>
<td align="center" valign="middle" rowspan="1" colspan="1">21,928</td>
<td align="center" valign="middle" rowspan="1" colspan="1">104</td>
<td align="center" valign="middle" rowspan="1" colspan="1">44,168</td>
<td align="center" valign="middle" rowspan="1" colspan="1">22.76</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">#10</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">445,975</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">891,950</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">158,529</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">75,425</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">543,333</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">60.92</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t010" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t010_Table 10</object-id>
<label>Table 10</label>
<caption>
<p>Saved data.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">i</th>
<th colspan="5" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Contour #1. (Outer Contour)</th>
<th colspan="5" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Contour #2. (Inner Contour)</th>
</tr>
<tr>
<th colspan="2" align="center" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm176">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</th>
<th colspan="2" align="center" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm177">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"></th>
<th colspan="2" align="center" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm178">
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</th>
<th colspan="2" align="center" valign="middle" rowspan="1">
<inline-formula>
<mml:math id="mm179">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:math>
</inline-formula>
</th>
<th align="center" valign="middle" rowspan="1" colspan="1"></th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">type</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>x</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">
<italic>y</italic>
</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">type</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NE-SW</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NW-SE</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NW-SE</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">NE-SW</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">11.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">13.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">11.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">11.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">5.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">9.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" rowspan="1" colspan="1"></td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">10</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3.5</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t011" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t011_Table 11</object-id>
<label>Table 11</label>
<caption>
<p>Increases of pixels traced by the bidirectional scan from the one-directional scan.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle" style="border-top:solid thin" rowspan="1" colspan="1"></th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">Total Number</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Proposed</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">ISBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MSBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">SBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MNT</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">RSA</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1"></th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Number</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">%</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">81,189</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">50,825</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">152,489</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.002</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.002</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">312,812</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">157,377</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.002</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.002</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.000</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">98,579</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.007</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.007</td>
<td align="center" valign="middle" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.008</td>
<td align="center" valign="middle" rowspan="1" colspan="1">8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.008</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">283,717</td>
<td align="center" valign="middle" rowspan="1" colspan="1">120</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.042</td>
<td align="center" valign="middle" rowspan="1" colspan="1">120</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.042</td>
<td align="center" valign="middle" rowspan="1" colspan="1">67</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.024</td>
<td align="center" valign="middle" rowspan="1" colspan="1">67</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.024</td>
<td align="center" valign="middle" rowspan="1" colspan="1">92</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.032</td>
<td align="center" valign="middle" rowspan="1" colspan="1">92</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.032</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">97,031</td>
<td align="center" valign="middle" rowspan="1" colspan="1">12</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.012</td>
<td align="center" valign="middle" rowspan="1" colspan="1">12</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.012</td>
<td align="center" valign="middle" rowspan="1" colspan="1">15</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.015</td>
<td align="center" valign="middle" rowspan="1" colspan="1">15</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.015</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.001</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">453,721</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7075</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.559</td>
<td align="center" valign="middle" rowspan="1" colspan="1">7076</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.560</td>
<td align="center" valign="middle" rowspan="1" colspan="1">433</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.095</td>
<td align="center" valign="middle" rowspan="1" colspan="1">444</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.098</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3414</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.752</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3414</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.752</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Total</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1,687,740</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">7220</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.428</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">7221</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.428</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">527</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.031</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">538</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.032</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3509</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.208</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3509</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.208</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-16-00353-t012" position="float">
<object-id pub-id-type="pii">sensors-16-00353-t012_Table 12</object-id>
<label>Table 12</label>
<caption>
<p>Computational time traced bidirectionally.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-top:solid thin" colspan="1">Image</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Proposed</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">ISBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MSBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">SBF</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">MNT</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">RSA</th>
</tr>
<tr>
<th align="center" valign="middle" rowspan="1" colspan="1">Processing</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin" colspan="1">Ratio</th>
<th align="center" valign="middle" rowspan="1" colspan="1">Processing</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin" colspan="1">Ratio</th>
<th align="center" valign="middle" rowspan="1" colspan="1">Processing</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin" colspan="1">Ratio</th>
<th align="center" valign="middle" rowspan="1" colspan="1">Processing</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin" colspan="1">Ratio</th>
<th align="center" valign="middle" rowspan="1" colspan="1">Processing</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin" colspan="1">Ratio</th>
<th align="center" valign="middle" rowspan="1" colspan="1">Processing</th>
<th rowspan="2" align="center" valign="middle" style="border-bottom:solid thin" colspan="1">Ratio</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Time</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Time</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Time</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Time</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Time</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Time</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.064</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.074</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.064</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.069</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.061</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.063</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.061</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.056</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.061</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.4</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.072</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.083</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.084</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.077</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.077</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.083</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.116</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.131</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.109</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.111</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.135</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.078</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.084</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.089</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.078</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.078</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.089</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.8</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.065</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.073</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.075</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.064</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.072</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.1</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.108</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.111</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.134</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.6</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.113</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.7</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.125</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.4</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#8</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.069</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.0</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.074</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.067</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.075</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.3</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">#9</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.128</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.139</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.172</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.127</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.13</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.147</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.3</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Total</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.755</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.806</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.894</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.6</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.752</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.774</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.8</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.862</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.7</td>
</tr>
</tbody>
</table>
</table-wrap>
</floats-group>
</pmc>
<affiliations>
<list></list>
<tree>
<noCountry>
<name sortKey="Chae, Seungho" sort="Chae, Seungho" uniqKey="Chae S" first="Seungho" last="Chae">Seungho Chae</name>
<name sortKey="Cheong, Cheolho" sort="Cheong, Cheolho" uniqKey="Cheong C" first="Cheolho" last="Cheong">Cheolho Cheong</name>
<name sortKey="Han, Tack Don" sort="Han, Tack Don" uniqKey="Han T" first="Tack-Don" last="Han">Tack-Don Han</name>
<name sortKey="Kim, Dongchul" sort="Kim, Dongchul" uniqKey="Kim D" first="Dongchul" last="Kim">Dongchul Kim</name>
<name sortKey="Seo, Jonghoon" sort="Seo, Jonghoon" uniqKey="Seo J" first="Jonghoon" last="Seo">Jonghoon Seo</name>
<name sortKey="Shim, Jinwook" sort="Shim, Jinwook" uniqKey="Shim J" first="Jinwook" last="Shim">Jinwook Shim</name>
</noCountry>
</tree>
</affiliations>
</record>

Pour manipuler ce document sous Unix (Dilib)

EXPLOR_STEP=$WICRI_ROOT/Ticri/CIDE/explor/OcrV1/Data/Pmc/Checkpoint
HfdSelect -h $EXPLOR_STEP/biblio.hfd -nk 000005 | SxmlIndent | more

Ou

HfdSelect -h $EXPLOR_AREA/Data/Pmc/Checkpoint/biblio.hfd -nk 000005 | SxmlIndent | more

Pour mettre un lien sur cette page dans le réseau Wicri

{{Explor lien
   |wiki=    Ticri/CIDE
   |area=    OcrV1
   |flux=    Pmc
   |étape=   Checkpoint
   |type=    RBID
   |clé=     PMC:4813928
   |texte=   Fast Contour-Tracing Algorithm Based on a Pixel-Following Method for Image Sensors
}}

Pour générer des pages wiki

HfdIndexSelect -h $EXPLOR_AREA/Data/Pmc/Checkpoint/RBID.i   -Sk "pubmed:27005632" \
       | HfdSelect -Kh $EXPLOR_AREA/Data/Pmc/Checkpoint/biblio.hfd   \
       | NlmPubMed2Wicri -a OcrV1 

Wicri

This area was generated with Dilib version V0.6.32.
Data generation: Sat Nov 11 16:53:45 2017. Site generation: Mon Mar 11 23:15:16 2024