JP2008186124A - 画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 - Google Patents
画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 Download PDFInfo
- Publication number
- JP2008186124A JP2008186124A JP2007017432A JP2007017432A JP2008186124A JP 2008186124 A JP2008186124 A JP 2008186124A JP 2007017432 A JP2007017432 A JP 2007017432A JP 2007017432 A JP2007017432 A JP 2007017432A JP 2008186124 A JP2008186124 A JP 2008186124A
- Authority
- JP
- Japan
- Prior art keywords
- run
- survey
- row
- image data
- runs
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Abstract
【課題】ランレングス化によって作成されたランのラベリング処理を高速化する。
【解決手段】ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行う機能と、前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行う機能とを有する演算処理装置13を有する。
【選択図】図12
【解決手段】ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行う機能と、前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行う機能とを有する演算処理装置13を有する。
【選択図】図12
Description
本発明は、2値画像データをラベリング処理する画像データ処理方法、画像データ処理プログラム及び画像データ処理装置に関する。
近年、CCDやCMOSを用いた撮像素子の高画素数化及び高密度化が進展している。これらの撮像素子によって取得された画像データを処理することにより、より詳しい情報が得られるようになってきた。そして、その情報を用いて、いろいろな検査が行われるようになってきた。例えば、製品への異物の付着あるいは傷の存在などによる欠陥識別のための検査が一例として挙げられる。このような検査を行う際には、画像データの2値化後に注目すべき値(‘黒’または‘白’に相当する値)を持つ画素の連結性を調べるラベリング処理を施す。そして、その同じラベルを持つ領域の大きさ、形状等から異物、傷等の欠陥を判断することになる。
このようなラベリング処理は従来から一般的に行われている技術である(例えば、特許文献1及び特許文献2参照)。
特許文献1に開示された技術(以下、第1従来技術という)には、近傍処理によるラベリング処理のアルゴリズム(以下、近傍処理アルゴリズムという)についての記載がなされている。これは、処理対象の画像データに対して、2値化データの最端部からラスタスキャン走査を行い、連結成分を調べて、同じ連結成分に属する全ての画素に同じラベルを割り当てて行く処理を行うものである。このように、第1従来技術では、2値化された画像データの画素すべてにアクセスするため、例えば、数百万画素といった高画素数の画像データをラベリング処理する場合、ラベリング処理を行うための演算量と時間が膨大なものとなるという問題がある。
特許文献1に開示された技術(以下、第1従来技術という)には、近傍処理によるラベリング処理のアルゴリズム(以下、近傍処理アルゴリズムという)についての記載がなされている。これは、処理対象の画像データに対して、2値化データの最端部からラスタスキャン走査を行い、連結成分を調べて、同じ連結成分に属する全ての画素に同じラベルを割り当てて行く処理を行うものである。このように、第1従来技術では、2値化された画像データの画素すべてにアクセスするため、例えば、数百万画素といった高画素数の画像データをラベリング処理する場合、ラベリング処理を行うための演算量と時間が膨大なものとなるという問題がある。
一方、特許文献2に開示された技術(以下、第2従来技術という)は、2値化された画像データのラベリング処理を高速化するために、ランレングスで表現された画像データに対してラベリング処理を施すことが記載されている。そのラベリング処理方法は、ランレングス化された画像データに上述の近傍処理アルゴリズムを応用したものである。このように、第2従来技術は、画像データがランレングス化されることにより、ランレングス化された部分にアクセスすればよいことから、2値化された画像データの画素すべてにアクセスする必要がないため、画像データへのアクセス回数の低減が期待され、更には高速化も期待される。
上述した第1従来技術は、上述したように、2値化された画像データの画素すべてにアクセスするため、ラベリング処理を行うための演算量と時間が膨大なものとなるという問題がある。
また、第2従来技術は、2値画像データがランレングス化されることによる画像データへのアクセス回数の低減が期待され、更には高速化も期待されるが、第2従来技術は、2値画像データをすべてランレングス化したのちに、ラベリング処理するものであるため、
無駄な処理を行う可能性もあり、それが高速化の障害となる場合もある。また、第2従来技術は、ラベリング処理後に行われる特徴量の算出処理の高速化などについては特に考慮されているものではない。
無駄な処理を行う可能性もあり、それが高速化の障害となる場合もある。また、第2従来技術は、ラベリング処理後に行われる特徴量の算出処理の高速化などについては特に考慮されているものではない。
本発明は、ラベリング処理の高速化を図るとともにラベリング処理後に行われる特徴量の算出処理などの高速化に寄与できる画像データ処理方法、画像データ処理プログラム及び画像データ処理装置を提供することを目的とする。
(1)本発明の画像データ処理方法は、2値画像データをランレングス化することによって作成されたラン同士の連結調査処理を行い、連結しているランに同じラベルを付与する処理を行う画像データ処理方法であって、ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行うステップと、前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行うステップとを有することを特徴とする。
本発明の画像データ処理方法によれば、注目ランとの連結を当該注目ランの存在するランの直前の行又は列及び直後の行又は列に存在するラン(連結調査ラン)との間で調べ、所定の連結条件を満たしたときに注目ランに付与されたラベル値を付与するようにしている。これを注目ランと連結調査ランのインデクス(当該注目ラン及び連結調査ランが存在する行又は列ごとに各ランに与えられたインデクス)を変化させながら行う。これにより、2値画像データにおけるそれぞれの連結領域にラベル値を付与する処理を高速に行うことができ、さらには、ラベリング処理後に行われる特徴量の算出処理などの高速化に寄与できる。例えば、CCDなどの撮像素子によって撮像された画像データを製品の外観検査などの目的で使用するような場合、特徴量の算出を少ない演算量で高速に行うことができる。
(2)前記(1)に記載の画像データ処理方法においては、前記第nの連結調査ランは、前記第1の連結調査ランの左右方向又は上下方向にランが存在する場合には、前記第1の連結調査ランの左右方向又は上下方向に設定することが好ましい。
このように、第1の連結調査ランの左右方向又は上下方向にそれぞれ連結調査ランを設定して注目ランとの連結調査を行うことにより、注目ランに連結するランの検出を効率よくかつ、適切に行うことができる。
このように、第1の連結調査ランの左右方向又は上下方向にそれぞれ連結調査ランを設定して注目ランとの連結調査を行うことにより、注目ランに連結するランの検出を効率よくかつ、適切に行うことができる。
(3)前記(2)に記載の画像データ処理方法においては、前記第1の連結調査ランは、前記注目ランの存在する行又は列において前記注目ランに与えられたインデクスと、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在する各ランに与えられたインデクスとに基づいて設定することが好ましい。
これは、連結調査処理を行う際にどの連結調査ランから連結調査処理を開始するかを決めるための1つの例である。具体的には、前記注目ランの存在する行又は列において前記注目ランに与えられたインデクスを「k」としたとき、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在する各ランのうち、当該注目ランの存在する行又は列の直前又は直後の行又は列において「k」のインデクスが与えられたランを第1の連結調査ランとして設定し、この第1の連結調査ランから注目ランとの連結の有無の判定を開始す
るというものである。これは、注目ランの存在する行とその前後の行においては画像に大きな変化がない場合が多いことを利用したものであり、このようにして連結調査開始ランを設定することにより、連結調査処理を効率よく行うことでき、ラベリング処理の高速化が図れる。
るというものである。これは、注目ランの存在する行とその前後の行においては画像に大きな変化がない場合が多いことを利用したものであり、このようにして連結調査開始ランを設定することにより、連結調査処理を効率よく行うことでき、ラベリング処理の高速化が図れる。
(4)前記(2)に記載の画像データ処理方法においては、前記第1の連結調査ランは、前記注目ランの存在する行又は列に存在するランの総数と前記注目ランの存在する行又は列の直前又は直後の行又は列におけるランの総数との比に基づいて設定することが好ましい。
これは、連結調査処理を行う際にどの連結調査ランから連結調査処理を開始するかを決めるための他の例であり、注目ランが存在する行又は列に存在するランの総数と、前記注目ランが存在する行又は列の直前又は直後の行又は列に存在するランの総数とに大きな違いが有る場合に有効な方法である。
具体的には、注目ランの当該行における注目ランのインデクスをk、当該行のランの総数をN1、注目ランが存在する行又は列の直前又は直後の行又は列に存在するランの総数をN2としたとき、前記第1の連結調査ランの当該行におけるインデクスを、round(k×N2/N1)によって求める。例えば、N1が100個、k=50、N2が10個であったとすると、50×10/100=5と求められ、これにより、当該行における連結調査のランインデクスは「5」と設定される。このような処理によっても第1の連結調査ランを設定することができ、連結調査処理を効率よく行うことできる。なお、「round」は少数点以下の値を丸めて整数とすることを意味する。
(5)本発明の画像データ処理プログラムにおいては、2値画像データをランレングス化することによって作成されたラン同士の連結調査処理を行い、連結しているランに同じラベルを付与する処理を画像データ処理装置において実行させるための画像データ処理プログラムであって、ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行うステップと、前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行うステップとを有することを特徴とする。
このような画像データ処理プログラムを画像データ処理装置で実行させることにより、前記(1)の画像データ処理方法と同様の効果が得られる。なお、(5)に記載の画像データ処理プログラムにおいても前記(2)〜(4)の画像データ処理方法と同様の特徴を有することが好ましい。
(6)本発明の画像データ処理装置においては、2値画像データをランレングス化することによって作成されたラン同士の連結調査処理を行い、連結しているランに同じラベルを付与する処理を行う画像データ処理装置であって、ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行う機能と、前記第1の連結調査ラン
と同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行う機能とを有する演算処理装置を有することを特徴とする。
と同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行う機能とを有する演算処理装置を有することを特徴とする。
本発明の画像データ処理装置がこのような機能を有する演算処理装置を有することにより、前記(1)の画像データ処理方法と同様の処理を行うことができ、前記(1)の画像データ処理方法と同様の効果が得られる。なお、(6)に記載の画像データ処理装置においても前記(2)〜(4)の画像データ処理方法と同様の特徴を有することが好ましい。
以下、本発明の実施形態について説明する。
図1は本発明の実施形態に係る画像データ処理方法を説明するために用いる2値画像データの一例を示す図である。図1に示す2値画像データは、CCDカメラなどの撮像装置によって得られたグレー階調の画像データを閾値判定により2値化することによって得ることができる。
図1は本発明の実施形態に係る画像データ処理方法を説明するために用いる2値画像データの一例を示す図である。図1に示す2値画像データは、CCDカメラなどの撮像装置によって得られたグレー階調の画像データを閾値判定により2値化することによって得ることができる。
図1に示す2値画像データにおいて示されている縦方向及び横方向の「0,1,2,・・・」の数値は、マトリクス状に配列された画素の行方向の位置及び列方向の位置を示ものである。図1において、iは行を示す値(行インデクスという)、jは列を示す値(列インデクスという)であり、図1に示す2値画像データにおいては、iは0,1,2,・・・,7の値をとり、jは0,1,2,・・・,36の値をとる。
また、図1に示す2値画像データにおいて、灰色で示す画素は、‘1’(Hと表記する)の画素データを有する画素であり、白色で示す画素は、‘0’(Lと表記する)の画素データを有する画素であるとし、ここでは、「H」の画素又はその連続を「ラン」として作成し、作成されたランについてランレングス化を行うとともにラベリング処理を行うものとする。
本発明の実施形態に係る画像データ処理方法では、図1に示す2値画像データをi=0,1,2,・・・の順で各行ごとにj=0からランレングス化する。なお、i=0の行を0行目、i=1の行を1行目、i=2の行を2行目というように呼ぶこととする。また、ランレングス化によって作成された各々のランのインデクス(ランインデクスという)を「m」で表し、「m」はランの作成順に0,1,2,・・・の値をとる。そして、ランインデクス「m」が与えられたランをRun[m]で表すものとする。図1に示す2値画像データにおいては、1行目から順に作成されたランは、各々の行において5個ずつであり合計25個存在するので、Run[0],Run[1],Run[2],・・・,Run[24]というように表される。
図2はランレングス化によって作成されたランに対応するランデータ(ラベル値付与処理前のランデータ)を示す図である。図2(a)は各ランに対応するランデータを作成順序で記憶領域に格納した状態の一例を示す図である。図2(a)に示すランデータは、図1に示す2値画像データの作成後の最初の段階で作成される。なお、図2(a)においては、各ランデータの配列が2次元的な配列であるかのように示されているが、記憶領域ではこれら各ランデータは1次元のデータ配列として保存される。
図2(a)に示すRun[0]〜Run[24]に対応するランデータをそれぞれ太線枠で表し、各ランデータは4つの数値で構成される。各ランデータは、図2における太線枠内の4つの数値のうちの左から1番目(左端)の数値は、2値画像データ(図1参照)における当該ランの始端画素位置(以下では単に始端位置という)を示す列の値(列インデク
ス「j」)、左から2番目の数値は、2値画像データにおける当該ランの終端画素位置(以下では単に終端位置という)を示す列の値(列インデクス「j」)、左から3番目の数値は当該ランに付与されたラベル値、左から4番目(右端)の数値は、2値画像データにおける当該ランの行の値(行インデクス「i」)を表している。
ス「j」)、左から2番目の数値は、2値画像データにおける当該ランの終端画素位置(以下では単に終端位置という)を示す列の値(列インデクス「j」)、左から3番目の数値は当該ランに付与されたラベル値、左から4番目(右端)の数値は、2値画像データにおける当該ランの行の値(行インデクス「i」)を表している。
例えば、図2(a)に示すRun[0]に対応するランデータを構成する数値「4,4,0,1」の「4」は、Run[0]の始端位置がj=4(4列目)であり、その次の「4」はRun[0]の終端位置が同じくj=4(4列目)であることを示している。また、その次の「0」は付与されたラベル値であるが、この段階では、ラベル値は初期値としての「0」がセットされており、まだラベル値が付与されていないことを示している。そして、最後の「1」はRun[0]の存在する行がi=1(1行目)であることを示している。この図2(a)に示すようなラベル値に初期値としての「0」がセットされたランデータを図1に示す2値画像データの作成後に作成しておく。なお、各ランのラベル値は、ラベリング処理(図3及び図5〜図10参照)によって付与された値がセットされる。
図2(b)は各ランデータと各ランとの対応を示す図であり、「0」〜「24」の数値は、作成されたランのインデクス「m」である。例えば、図2(b)における「0」はRun[0]を表し、Run[0]に対応するランデータは、図2(a)における最左端でかつ最上段のランデータ「4,4,0,1」であることを示すものである。
図3はラベリング処理の全体的な処理手順を説明するためのフローチャートである。
図3に示すフローチャートを概略的に説明する。図3において、初期設定として、「i=0、Label=0、n=0」の設定を行う(ステップS1,S2)。ここで、「i」は図1に示す2値画像データの行インデクスであり、0,1,2,・・・で表される。「Label」は、作成されたランに対して付与されるラベル値であり、初期値を0とし、1,2,3,・・・の値が1から順に付与され、ラベル値「1」、ラベル値「2」というように表される。「n」はスタック格納数であり、これは、ラベリング処理の段階で、ラベルの付与されたランのインデクスをスタックに一時格納する処理を行う際の格納数である。
図3に示すフローチャートを概略的に説明する。図3において、初期設定として、「i=0、Label=0、n=0」の設定を行う(ステップS1,S2)。ここで、「i」は図1に示す2値画像データの行インデクスであり、0,1,2,・・・で表される。「Label」は、作成されたランに対して付与されるラベル値であり、初期値を0とし、1,2,3,・・・の値が1から順に付与され、ラベル値「1」、ラベル値「2」というように表される。「n」はスタック格納数であり、これは、ラベリング処理の段階で、ラベルの付与されたランのインデクスをスタックに一時格納する処理を行う際の格納数である。
このような初期設定がなされたのち、図2(b)に示す各ランデータと各ランとの対応を示す図に基づいて、まずは、1行目(i=1)のRun[0]に対応するランデータにアクセスしたとする。図3において、まず、「i<画像高さ」であるか否かを判定する(ステップS2)。ここで、「i<画像高さ」の「画像像高さ」は、2値画像データにおける行数であり、図1に示す2値画像データにおいては、「画像像高さ=8」である。したがって、ステップS2における「i<画像高さ」であるか否かの判定は、図1に示す2値画像データにおいては、「i」が「i≦7」であれば、「Yes」のパスに進み、「i」が「i≧8」であれば、「No」のパスに進む。
この段階では、i=1であり、「i<画像高さ」であるので、「Yes」のパスに進んで「k=0」及び「N=(i−1)行までのランの総数」をセットする(ステップS3)。ステップS3における「k」は当該行におけるランのインデクスであり、これは、当該行において生成されたランの当該行における順番(0,1,2,・・・)を表すものである。例えば、1行目(i=1)の最も左側のランは当該行における0番目のランであるので、「k=0」となる。
なお、その時点において注目する行「i」(注目行「i」という)に存在するランのインデクスを「注目ランインデクス」と呼ぶことにする。また、ステップS3における「N=(i−1)行までのランの総数」は、直前の行(注目行「i」の1つ上の行)までに作成されランの総数を「N」とすることであり、図1に示す2値画像データの例では、「(
i−1)行までのランの総数」すなわち0行目(i=0)までのランの総数は0個であるので、「N=0」がセットされる。
i−1)行までのランの総数」すなわち0行目(i=0)までのランの総数は0個であるので、「N=0」がセットされる。
続いて、「k<i行のランの総数」であるか否かを判定する(ステップS4)。これは、ステップS3でセットされた注目ランインデクス「k」が当該注目行「i」において作成されたランの総数よりも小さいか否かを判定するもので、「k<i行のランの総数」であれば「Yes」のパスに進んで、ステップS5の処理を行い、「No」であれば、「i」をインクリメント(ステップS12)してステップS2に戻る。
なお、ランレングス化を行う際には、各行において何個のランが作成されているかのデータ(ラン数テーブルと呼ぶことにする)を作成しておくものとする。このラン数テーブルを参照することによって、各々の行に何個のランが存在するかを知ることができる。図1に示す2値画像データの例においては、0行目(i=0)におけるランの総数は0個、1行目(i=1)から5行目(i=5)におけるランの総数はそれぞれ5個、6行目(i=6)及び7行目(i=7)におけるランの総数はそれぞれ0個である。したがって、注目行「i=1」におけるランの総数は「5」であり、現在の注目ランインデクス「k」は「0」であるので、ステップS4では「Yes」のパスに進み、「Run[N+k].label=0」を判定する(ステップS5)。
ステップS5における「Run[N+k]」の[N+k]は、この場合、N=0,k=0であるので、[0]であり、Run[0]となる。これは、ランインデクス「m」が「m=0」であることを意味している。そして、Run[N+k].label=0」を判定すると、この時点において、「Run[N+k]」すなわちRun[0]のランデータによれば、ラベル値は「0」(図2参照)であるので、「Yes」のパスに進み、ステップS6の処理を行う。
ステップS6の処理は、「Label++」、「Run[N+k].label=Label」、「n++」をセットするとともに「スタックに[N+k]を格納」する処理である。ここで、「Label++」はラベル値をインクリメントする処理であり、このラベル値のインクリメント処理により、ラベル値は「0」から「1」となり、「Label=1」すなわちラベル値「1」をセットする。したがって、現段階においては、「m=0」のランインデクスを有するランすなわちRun[0]のラベル値がラベル値「1」となる。また、「n++」はスタック格納数を「1」とする。また、「スタックに[N+k]を格納」は、スタックにラベル値の付与されたランのランインデクス[N+k]を格納する。この場合、[N+k]=0である。
次に、「n>0」を判定する(ステップS7)。これは、スタック数が0であるか否かを判定するもので、この場合、スタック数が0でないので、「Yes」のパスに進んで、ステップS8の処理を行う。ステップS8では、スタックに格納されているランインデクス[N+k]の取り出しを行い、それを[N’+k’]として、「ランインデクス=[N’+
k’]」をセットするとともに、「i’=Run[N’+k’].row」をセットする。
ここで、[N’+k’]は「0」であり、i’=1である。そして、「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」を行う(ステップS9,S10)。
k’]」をセットするとともに、「i’=Run[N’+k’].row」をセットする。
ここで、[N’+k’]は「0」であり、i’=1である。そして、「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」を行う(ステップS9,S10)。
なお、スタックから取り出されたラン(ランインデクス[N’+k’]が与えられたRun[N’+k’])を注目ランと呼ぶことにする。この時点における注目ランは、Run[
0]であり、その注目ランインデクス「k’」は「k’=0」である。
0]であり、その注目ランインデクス「k’」は「k’=0」である。
ステップS7からステップS10までの処理のループは、スタックから取り出した注目ランに連結しているランを調べ、連結しているランに同じラベル値を付与するという処理
である。なお、ステップS9,S10における「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」については図5〜図10により後述する。
である。なお、ステップS9,S10における「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」については図5〜図10により後述する。
また、注目ランの存在する行の直前(i’−1)行または直後(i’+1)行に存在するランのうち、注目ランに連結しているか否かを調べるランを「連結調査ラン」と呼ぶことにする。また、当該連結調査ランが存在する行における当該連結調査ランのインデクスを連結調査ランインデクスと呼ぶことにする。この連結調査ランインデクスは、当該行における連結調査ランの順番を表すものであり、「0,1,2,・・・」の値で表される。例えば、連結調査ランインデクスを「k’’」で表すとすれば、(i’−1)行において最も左側に存在する連結調査ランインデクスは、「k’’=0」で表される。
図3及び図5〜図10の処理を行うことによって、図1に示す2値画像データにおける連結領域A1に対してラベル値「1」が付与されることになる。
図3及び図5〜図10の処理を行うことによって、図1に示す2値画像データにおける連結領域A1に対してラベル値「1」が付与されることになる。
次に、Run[1]に対応するランデータ「11,11,0,1」にアクセスし、同様の処理を行う。Run[1]に対応するランデータへのアクセスは、図3におけるステップS11において注目列ランインデクス「k」がインクリメント(k++)されることにより、「k=1」となって、Run[1]に対応するランデータへのアクセスがなされる。
Run[1]に対応するランデータにアクセスしたあとは、図3におけるステップS4以降の処理がなされる。この処理はRun[0]に対応するランデータの場合と同様に考えることができ、図1に示す2値画像データにおける連結領域A2に対してラベル値「2」が付与される。
図4は図2に示すラベリング処理前の状態のランレングス化データにおいてラベル値「2」までが付された状態を示す図である。このように、ラベル値「2」までの付与処理が終了した状態において、図3に示すフローチャートにおけるステップS11の「k」がインクリメントされて、「k=2」となると、この場合、Run[N+k]は、Run[0+
2]となるので、Run[2]となり、Run[2]に対応するランデータにアクセスする。
2]となるので、Run[2]となり、Run[2]に対応するランデータにアクセスする。
以下に、Run[2] に対応するランデータにアクセスした場合のラベリング処理につ
いて、図3のフローチャート及び図5〜図10のフローチャートと、図11のラベル値「3」を付与する際のラベリング処理における状態の遷移を示す図とを用いて説明する。
いて、図3のフローチャート及び図5〜図10のフローチャートと、図11のラベル値「3」を付与する際のラベリング処理における状態の遷移を示す図とを用いて説明する。
図3におけるステップS11において、「k」がインクリメントされ、「k=2」となると、まず、ステップS4の「k<i行のランの総数」の判定を行うが、この場合においても、「k<i行のランの総数」を満たすので、「Yes」のパスに進み、ステップS5の「Run[N+k].label=0」処理を行う。このとき、N=0,k=2であるので、「Run[2].label=0」を判定する処理を行う。ここで、Run[2]に対応するランデータは、図3における最上段の左から2番目の「18,18,0,1」のランデータである。
したがって、ステップS5において、「Run[2].label=0」を判定すると、この時点では、Run[2]はラベル値「0」であるため、「Yes」のパスに進んで、ステップS6の処理を行う。ステップS6においては、前述したように、ラベル値がインクリメントされ、そのインクリメントされたラベル値「3」がRun[2]のラベル値としてセットされる。これにより、Run[2]のラベル値は「3」となり、そのランデータは「18,18,0,1」から「18,18,3,1」となる(図11の処理P1参照)。また、「n」がインクリメントされ「n=1」がセットされ、スタックにRun[2]のランインデクス「2」が格納される。
次に、「n>0」を判定する(ステップS7)。これは、スタック数が「0」であるか否かを判定するもので、この場合、スタック数が「0で」ないので、「Yes」のパスに進んで、ステップS8の処理を行う。ステップS8の処理は、スタックに格納されている[N+k]の取り出しを行い、それを[N’+k’]として、「ランインデクス=[N’+k
’]」をセットするとともに、「i’ =Run[N’+k’].row」をセットする。ここで、[N’+k’]は「2」であり、i’=1である。
’]」をセットするとともに、「i’ =Run[N’+k’].row」をセットする。ここで、[N’+k’]は「2」であり、i’=1である。
そして、「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」を行う(ステップS9,S10)。なお、スタックから取り出されたランインデクスは「2」であるので、「2」のランインデクスが与えられたRun[2]がこの時点における注目ランとなる。
なお、「(i’−1)行の連結調査処理」は図5〜図7のフローチャートに示す処理手順によって行われ、「(i’+1)行の連結調査処理」は図8〜図10のフローチャートに示す処理手順によって行われる。
図5は図3のステップS9における「(i’−1)行の連結調査処理」の全体的な処理手順を説明するためのフローチャートである。図5において、まずは、「i’!=0」を行う(ステップS21)。ステップS21における「i’」は、図3におけるステップS8において、「Run[N’+k’].row=i’」によりセットした「i’」である。そして、「i’」が「0」でなければ、ステップS21において「Yes」のパスに進んで、「k’’=k’」をセットするとともに、「N’’=(i’−2)行までのランの総数」をセットする(ステップS22)。
ステップS22における「k’’」は連結調査ランインデクスであり、「k’’=k’」は、連結調査ランインデクス「k’’」を注目ランインデクス「k’」とする処理である。これは、連結調査ランインデクスに対応する位置のランが、注目ラン(Run[2])との連結を調査する際に、第1番目に連結調査を行うべく第1の連結調査ランとして設定されることを意味している。
例えば、注目ランインデクス「k’」が「k’=3」であるとすれば、連結調査ランインデクス「k’’」も「k’’=3」であり、注目ランの直前又は直後の行における「k’’=3」の位置に対応するランを第1の連結調査ランとして設定することを意味している。
そして、第1の連結調査ランと同じ行に隣り合って存在するランを第n(nは2以上の整数)の連結調査ランとして設定し、第1の連結調査ランと前記注目ランとの連結調査を行ったのち、第nの連結調査ランと前記注目ランとの連結調査を順次行う。なお、第nの連結調査ランは、第1の連結調査ランの存在する行の左右両方向にそれぞれランが存在する場合には、第1の連結調査ランの存在する行において左右両方向に設定する。
具体的には、まず、注目ラン(Run[2])と連結調査ランインデクス「k’’」の増加方向(図1に示す2値画像データの右方向)のランとの連結調査を行う(ステップS23)。この連結調査ランインデクス「k’’」の増加方向の連結調査は、第1の連結調査ランとの連結調査を含むもので、その詳細な処理手順については、図6により後述する。そして、連結調査ランインデクス「k’’」の増加方向の連結調査が終了したら、「k’’=min(k’−1,(i’−1)行のランの総数−1)」を行う(ステップS24)。
ステップS24の処理は、注目ランと連結調査ランインデクス「k’’」の減少方向(
図1に示す2値画像データの左方向)のランとの連結調査(ステップS25)を行う際の、連結調査ランインデクス「k’’」を決めるための処理である。そして、ステップS24によって決められた連結調査ランインデクス「k’’」の減少方向の連結調査を行う(ステップS25)。連結調査ランインデクス「k’’」の減少方向の連結調査については図7により後述する。
図1に示す2値画像データの左方向)のランとの連結調査(ステップS25)を行う際の、連結調査ランインデクス「k’’」を決めるための処理である。そして、ステップS24によって決められた連結調査ランインデクス「k’’」の減少方向の連結調査を行う(ステップS25)。連結調査ランインデクス「k’’」の減少方向の連結調査については図7により後述する。
図8は図3のステップS10における「(i’+1)行の連結調査処理」の全体的な処理手順を説明するためのフローチャートである。図8において、まずは、「i’<(画像高さ−1)」を判定する(ステップS31)。ステップS31における「i’」は、図3におけるステップS8において、「Run[N’+k’].row=i’」によりセットした「i’」である。そして、「i’<(画像高さ−1)」であれば、ステップS31において「Yes」のパスに進んで、「k’’’=k’」をセットするとともに、「N’’’=i’行までのランの総数」をセットする(ステップS32)。
なお、ステップS31における「i’<(画像高さ−1)」の「画像像高さ」は、2値画像データにおける行数であり、図1に示す2値画像データにおいては、「画像高さ=8」であるので、「(画像高さ−1)=7」となる。したがって、ステップS31における「i’<(画像高さ−1)」であるか否かの判定は、「i’」が「i’≦6」であれば、「Yes」のパスに進み、「i’」が「i’≧7」であれば、「No」のパスに進む。
また、ステップS32の「k’’’=k’」をセットする処理は、図5におけるステップS22の「k’’=k’」をセットする処理と同様の処理である。
また、ステップS32の「k’’’=k’」をセットする処理は、図5におけるステップS22の「k’’=k’」をセットする処理と同様の処理である。
そして注目ラン「Run[2]」と連結調査ランインデクス「k’’’」の増加方向(図1に示す2値画像データの右方向)のランとの連結調査を行う(ステップS33)。この連結調査ランインデクス「k’’’」の増加方向の連結調査については、図9により後述する。そして、注目ラン「Run[2]」と連結調査ランインデクス「k’’’」の増加方向の連結調査が終了したら、「k’’’=min(k’−1,(i’+1)行のランの総数−1)」を行う(ステップS34)。
ステップS34の処理は、連結調査ランインデクス「k’’’」の減少方向(図1に示す2値画像データの左方向)のランとの連結調査(ステップS35)を行う際の、連結調査ランインデクス「k’’’」を決めるための処理である。そして、ステップS34によって決められた連結調査ランインデクス「k’’’」から当該連結調査ランインデクス「k’’’」の減少方向の連結調査を行う(ステップS35)。連結調査ランインデクス「k’’’」の減少方向の連結調査については図10により後述する。
ここで、現時点における注目ラン(Run[2])と連結調査ランとの連結調査処理を、図3のステップS8に戻って説明する。図3のステップS8は、スタックに格納されている[N+k]の取り出しを行い、それを[N’+k’]として、「ランインデクス=[N’+
k’]」をセットするとともに、「i’ =Run[N’+k’].row」、をセットする。このとき、[N’+k’]は「2」であり、i’=1である。
k’]」をセットするとともに、「i’ =Run[N’+k’].row」、をセットする。このとき、[N’+k’]は「2」であり、i’=1である。
そして、「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」を行う(ステップS9,S10)。なお、Run[2]の直前の行すなわち(i’−1)行には、ランは存在しないので、「(i’−1)行の連結調査処理」は行う必要が無く、ここでは、図8〜図10の「(i’+1)行の連結調査処理」を行う。
図8において、「i’<(画像高さ−1)」の判定(ステップS31)は、この場合、「i’=1」であるので、「Yes」のパスに進んで、「k’’’(連結調査ランインデクス)=k’」をセットするとともに、「N’’’=i’行までのランの総数」をセット
する(ステップS32)。このとき、「k’=2」であるので、「k’’’=2」がセットされ、また、「i’行までのランの総数=5」であるので、「N’’’=5」となる。そして、「k’’’=2」と「N’’’=5」がセットされたのち、連結調査ランインデクス「k’’’」の増加方向の連結調査処理を行う(ステップS33)。
する(ステップS32)。このとき、「k’=2」であるので、「k’’’=2」がセットされ、また、「i’行までのランの総数=5」であるので、「N’’’=5」となる。そして、「k’’’=2」と「N’’’=5」がセットされたのち、連結調査ランインデクス「k’’’」の増加方向の連結調査処理を行う(ステップS33)。
このように、本発明の実施形態では、連結調査ランインデクス「k’’’」を注目ランインデクス「k’」と同じ値としている。これは、注目ランの存在する行とその前後の行においては画像に大きな変化がない場合が多いことを利用したものであり、このようにして注目ランとの連結調査を行うべく連結調査ランを設定することにより、連結調査を効率よく行うことできる。
連結調査ランインデクス「k’’’」の増加方向の連結調査処理は、図9に示すような手順によって行われる。図9において、まずは、「k’’’<(i’+1)行のランの総数」を判定する(ステップS41)。ステップS41の処理は、連結調査ランインデクス「k’’’」が(i’+1)行におけるランの総数よりも小さいかを判定するもので、この場合、「i’=1」であり、(i’+1)行すなわち2行目におけるランの総数は「5」であるので、「Yes」のパスに進み、「Run[N’’’+k’’’].label!=Label」の判定を行う(ステップS42)。ここで、Run[N’’’+k’’’]は、注目ラン「Run[2]」に連結しているランであるか否かを調べる連結調査ランであり、ここでは、Run[7]である。
ステップS42の処理は、連結調査ラン「Run[N’’’+k’’’]」に、既にラベル値(この場合ラベル値「3」)が付与されているか否かを判定するものであり、ラベル値「3」が付与されていなければ、「Yes」のパスに進む。このときの連結調査ラン「Run[N’’’+k’’’]」は、Run[5+2]=Run[7]であり、この時点では、Run[7]のランデータは、図4に示すように、「17,19,0,2」であり、まだラベル値「3」が付与されていないので、「Yes」のパスに進んで、連結条件を満たすか否かの判定を行う(ステップS43,S44)。
連結条件を満たすか否かの判定は、ステップS43において、「Run[N’’’+k
’’’].begin≦Run[N’+k’].end」を判定し、ステップS44におい
て、「Run[N’’’+k’’’].end≧Run[N’+k’].begin」を判定するもので、これらの判定処理がともに「Yes」であれば、連結調査ラン「Run[N
’’’+k’’’]」は、注目ラン「Run[N’+k’]」に連結すると判定される。
’’’].begin≦Run[N’+k’].end」を判定し、ステップS44におい
て、「Run[N’’’+k’’’].end≧Run[N’+k’].begin」を判定するもので、これらの判定処理がともに「Yes」であれば、連結調査ラン「Run[N
’’’+k’’’]」は、注目ラン「Run[N’+k’]」に連結すると判定される。
ここで、「Run[N’’’+k’’’] .beginは、Run[7]の始端位置であ
り、「Run[N’+k’].endは、Run[2]の終端位置である。また、「Run[
N’’’+k’’’] .endは、Run[7]の終端位置であり、「Run[N’+k’].beginは、Run[2]の始端位置である。この場合、両者のランデータ(図2参照)からわかるように、「Run[N’’’+k’’’].begin≦Run[N’+k’].end」及び「Run[N’’’+k’’’].end≧Run[N’+k’].begin」をともに満足するので、連結調査ラン(Run[7])は、注目ラン(Run[2])に連結していると判定される。
り、「Run[N’+k’].endは、Run[2]の終端位置である。また、「Run[
N’’’+k’’’] .endは、Run[7]の終端位置であり、「Run[N’+k’].beginは、Run[2]の始端位置である。この場合、両者のランデータ(図2参照)からわかるように、「Run[N’’’+k’’’].begin≦Run[N’+k’].end」及び「Run[N’’’+k’’’].end≧Run[N’+k’].begin」をともに満足するので、連結調査ラン(Run[7])は、注目ラン(Run[2])に連結していると判定される。
このように、Run[7]がRun[2]に連結していると判定されると、ステップS45の処理を行う。ステップS45の処理は、「Run[N’’’+k’’’].label=Label」をセットするとともに、「n+++」をセットし、スタックに[N’’’+k’’’]を格納する処理を行う。ステップS45の処理のあとは、「k’’’++」を行って(ステップS46)、ステップS41に戻る。
なお、ステップS45における「Run[N’’’+k’’’].label=Label」は、この場合、Run[7]にラベル値「3」を付与する処理であり、Run[7]に対応するランデータは、「17,19,0,2」から「17,19,3,2」となる(図11の処理P2)。また、スタックに[N’’’+k’’’]を格納する処理は、この場合、Run[7]のランインデクス「7」を格納する処理である(図11の処理P3)。
ところで、ステップS43において、「Run[N’’’+k’’’].begin≦Run[N’+k’].end」を満たさない場合には、それ以上の連結調査は行わない。また、ステップS44において、「Run[N’’’+k’’’].end≧Run[N’+
k’].begin」を満たさない場合には、「k’’’++」を行い(ステップS45
)、ステップS41に戻る。
k’].begin」を満たさない場合には、「k’’’++」を行い(ステップS45
)、ステップS41に戻る。
この場合は、Run[7]がRun[2]に連結すると判定されたので、ステップS45において、「Run[N’’’+k’’’].label=Label」をセットするとともに、「n+++」をセットし、スタックに[N’’’+k’’’]を格納する処理を行ったのち、ステップS46により、「k’’’++」が行われ、今度は「k’’’=3」として、ステップS41以降の処理がなされる。この場合も、ステップS41では「Yes」のパスに進み、「Run[N’’’+k’’’].label!=Label」の判定を行う(ステップS42)。
ステップS42の処理は、連結調査ラン「Run[N’’’+k’’’]」に既にラベル値(この場合ラベル値「3」)が付与されているか否かを判定するものであり、ラベル値「3」が付与されていなければ、「Yes」のパスに進む。なお、このときの連結調査ラン「Run[N’’’+k’’’]」は、Run[5+3]=Run[8]である。この時点では、Run[8]のランデータは、図2に示すように、「24,26,0,2」であり、ラベル値「3」が付与されていないので、「Yes」のパスに進んで、連結条件を満たすか否かの判定を行う(ステップS43,S44)。
まず、ステップS43において、「Run[N’’’+k’’’].begin≦Run[N’+k’].end」を判定すると、この場合、連結調査ラン(Run[8])及び注目ラン(Run[2])の各ランデータ(図2参照)から明らかなように、「Run[N’’
’+k’’’].begin≦Run[N’+k’].end」を満足しないので、「連結
しない」として(図11の処理P4)、それ以上の連結判定処理は行わない。
’+k’’’].begin≦Run[N’+k’].end」を満足しないので、「連結
しない」として(図11の処理P4)、それ以上の連結判定処理は行わない。
このように、連結調査ランインデクス「k’’’」の増加方向の連結調査が終了すると、図8のフローチャートに示すように、今度は、連結調査ランインデクス「k’’’」の減少方向の連結調査を行う(ステップS35)。連結調査ランインデクス「k’’’」の減少方向の連結調査を行う際の連結調査ランインデクス「k’’’」は、図8のステップS34によって決められる。
図8のステップS34の処理は、「k’’’=min(k’−1,(i’+1)行のランの総数−1)」であり、これは、「k’−1」と「(i’+1)行のランの総数−1」のうちの小さい値を「k’’’」とするということを意味している。この場合、「k’=2」,「i’=1」,「(i’+1)行のランの総数=5」であるので、「k’’’=min(1,4)」と表される。したがって、「k’’’=1」とする。すなわち、連結調査ランインデクス「k’’’」の減少方向の連結調査は、連結調査ランインデクス「k’’’=1」として処理を開始する。
連結調査ランインデクス「k’’’」の減少方向の連結調査は、図10のフローチャートに示す処理手順により行われる。まず、「「k’’’≧0」を判定する(ステップS5
1)。この場合、「k’’’=1」であるので、「Yes」のパスに進んで、「Run[
N’’’+k’’’].label!=Label」の判定を行う(ステップS52)。
1)。この場合、「k’’’=1」であるので、「Yes」のパスに進んで、「Run[
N’’’+k’’’].label!=Label」の判定を行う(ステップS52)。
ステップS52の処理は、連結調査ラン(Run[N’’’+k’’’])に既にラベル値(この場合ラベル値「3」)が付与されているか否かを判定するものであるが、このときのRun[N’’’+k’’’]は、Run[5+1]=Run[6]である。この時点では、Run[6]のランデータは、図4に示すように、「10,12,2,2」であり、ラベル値「2」が付与されているが、Run[2]のラベル値「3」と同じではないので、「Yes」のパスに進んで、連結条件を満たすか否かの判定を行う(ステップS53,S54)。
まず、ステップS53において、「Run[N’’’+k’’’].end≧Run[N
’+k’].begin」を判定すると、この場合、図4に示すRun[6]のランデータ
とRun[2]のランデータとから明らかなように、「Run[N’’’+k’’’].end≧Run[N’+k’].begin」を満足しないので、「連結しない」として(図11の処理P5)、それ以上の連結判定処理は行わない。
’+k’].begin」を判定すると、この場合、図4に示すRun[6]のランデータ
とRun[2]のランデータとから明らかなように、「Run[N’’’+k’’’].end≧Run[N’+k’].begin」を満足しないので、「連結しない」として(図11の処理P5)、それ以上の連結判定処理は行わない。
続いて、スタックに格納されているランインデクスの取り出しを行う。このとき、スタックに格納されているランインデクスは「7」であるので、ランインデクス「7」が取り出される(図11の処理P6)。そして、Run[7]のランデータ「17,19,3,2」がセットされ(図11の処理P7)、このRun[7]に対する連結調査処理を行う。そして、この時点からは、Run[7]を注目ランとして処理を行う。
注目ラン(Run[7])に対する連結調査処理は、「(i’−1)行の連結調査処理」及び「(i’+1)行の連結調査処理」の両方を行う。ここで、「i’=2」であるので、1行目(i=1)と3行目(i=3)における連結調査を行う。
まず、(i’−1)行の連結調査処理について説明する。(i’−1)行の連結調査処理は、図5〜図8のフローチャートに示す処理手順によって行われる。
図5において、まず、「i’!=0」の判定を行う(ステップS21)。これは、注目行「i’」(この場合、i’=2)が0でないことを判定する処理であり、「i’」が0でなければ、「Yes」のパスに進んで、「k’’=k’」をセットするとともに、「N’’=(i’−2)行までのランの総数」をセットする(ステップS22)。このとき、「k’=2」であるので、「k’’=2」がセットされ、また、「(i’−2)行までのランの総数=0」であるので、「N’’=0」となる。このように、「k’’2」と「N’’=0」がセットされたのち、連結調査ランインデクス「k’’」の増加方向の連結調査処理を行う(ステップS23)。
図5において、まず、「i’!=0」の判定を行う(ステップS21)。これは、注目行「i’」(この場合、i’=2)が0でないことを判定する処理であり、「i’」が0でなければ、「Yes」のパスに進んで、「k’’=k’」をセットするとともに、「N’’=(i’−2)行までのランの総数」をセットする(ステップS22)。このとき、「k’=2」であるので、「k’’=2」がセットされ、また、「(i’−2)行までのランの総数=0」であるので、「N’’=0」となる。このように、「k’’2」と「N’’=0」がセットされたのち、連結調査ランインデクス「k’’」の増加方向の連結調査処理を行う(ステップS23)。
ところで、「(i’−1)行の連結調査処理」は、この場合、1行目(i=1)に存在するランのうち、注目ラン(Run[7])に連結するランを調べる処理であり、図6に示すような処理手順によって行われる。図6において、まずは、「k’’<(i’−1)行のランの総数」を判定する(ステップS61)。
ステップS61の処理は、注目行(i’行)ランインデクス「k’’」が前の行(i’−1)行におけるランの総数よりも小さいかを判定するもので、この場合、「i’=2」であり、(i’−1)行におけるランの総数は「5」であるので、「Yes」のパスに進み、「Run[N’’+k’’].label!=Label」の判定を行う(ステップS62)。
ステップS62の処理は、連結調査ラン(Run[N’’+k’’])に既にラベル値(
この場合ラベル値「3」)が付与されているか否かを判定するものであり、ラベル値「3」が付与されていなければ、「Yes」のパスに進む。なお、このときのRun[N’’
+k’’]は、Run[0+2]=Run[2]である。この時点では、Run[2]のランデ
ータは、「17,19,3,2」であり(図11の処理P8)、すでにラベル値「3」が付与されているので、「No」のパスに進んで、「k’’++」を行う(ステップS66)。
この場合ラベル値「3」)が付与されているか否かを判定するものであり、ラベル値「3」が付与されていなければ、「Yes」のパスに進む。なお、このときのRun[N’’
+k’’]は、Run[0+2]=Run[2]である。この時点では、Run[2]のランデ
ータは、「17,19,3,2」であり(図11の処理P8)、すでにラベル値「3」が付与されているので、「No」のパスに進んで、「k’’++」を行う(ステップS66)。
ステップS66により、「k’’=3」となり、「k’’=3」としてステップS61以降の処理を行う。この場合も、ステップS61では「Yes」のパスに進み、「Run[N’’+k’’].label!=Label」の判定を行う(ステップS62)。このときのRun[N’’+k’’]は、Run[0+3]=Run[3]である。この時点では、連結調査ラン(Run[3])のランデータは、図4に示すように、「25,25,0,1」であり、まだラベル値は付与されていないので、「Yes」のパスに進んで、連結条件を満たすか否かの判定を行う(ステップS63,S64)。
まず、ステップS63において、「Run[N’’+k’’].begin≦Run[N
’+k’].end」を判定すると、この場合、連結調査ラン(Run[3])及び注目ラ
ン(Run[7])の各ランデータ(図2参照)から明らかなように、「Run[N’’+
k’’].begin≦Run[N’+k’].end」を満足しないので、「連結しない
」として(図11の処理P9)、それ以上の連結判定処理は行わない。
’+k’].end」を判定すると、この場合、連結調査ラン(Run[3])及び注目ラ
ン(Run[7])の各ランデータ(図2参照)から明らかなように、「Run[N’’+
k’’].begin≦Run[N’+k’].end」を満足しないので、「連結しない
」として(図11の処理P9)、それ以上の連結判定処理は行わない。
このように、連結調査ランインデクス「k’’」の増加方向の連結調査が終了すると、図5のフローチャートに示すように、今度は、連結調査ランインデクス「k’’」の減少方向の連結調査を行う(ステップS25)。連結調査ランインデクス「k’’」の減少方向の連結調査を行う際の、連結調査ランインデクス「k’’」は、図5のステップS24によって決められる。
図5のステップS24の処理は、「k’’=min(k’−1,(i’−1)行のランの総数−1)」であり、この場合、「k’=2」,「i’=2」,「(i’−1)行のランの総数=5」であるので、「k’’’=min(1,4)」と表される。したがって、「k’’=1」とする。すなわち、連結調査ランインデクス「k’’」の減少方向の連結調査は、連結調査ランインデクス「k’’=1」として処理を開始する。
連結調査ランインデクス「k’’」の減少方向の連結調査は、図7のフローチャートに示す処理手順により行われる。まず、「「k’’≧0」を判定する(ステップS71)。この場合、「k’’=1」であるので、「Yes」のパスに進んで、「Run[N’’+
k’’].label!=Label」の判定を行う(ステップS72)。
k’’].label!=Label」の判定を行う(ステップS72)。
ステップS72の処理は、連結調査ラン(Run[N’’+k’’])に同じラベル値(この場合はラベル値「3」)が付与されているか否かを判定するものであるが、このとき、連結調査ラン(Run[N’’+k’’])は、Run[0+1]=Run[1]である。この時点では、連結調査ラン(Run[1])のランデータは、図4に示すように、「11,11,2,1」であり、ラベル値「2」が付与されているが、注目ラン(Run[7])のラベル値「3」と同じではないので、「Yes」のパスに進んで、連結条件を満たすか否かの判定を行う(ステップS73,S74)。
まず、ステップS73において、「Run[N’’+k’’].end≧Run[N’+
k’].begin」を判定すると、この場合、連結調査ラン(Run[1])及び注目ラ
ン(Run[7])の各ランデータ(図2参照)とから明らかなように、「Run[N’’
+k’’].end≧Run[N’+k’].begin」を満足しないので、「連結しな
い」として(図11の処理P10)、それ以上の連結判定処理は行わない。
k’].begin」を判定すると、この場合、連結調査ラン(Run[1])及び注目ラ
ン(Run[7])の各ランデータ(図2参照)とから明らかなように、「Run[N’’
+k’’].end≧Run[N’+k’].begin」を満足しないので、「連結しな
い」として(図11の処理P10)、それ以上の連結判定処理は行わない。
図11の処理P6〜P10に示すように、注目ラン(Run[7])に対する「(i’−1)行の連結調査処理」が終了すると、続いて、注目ランRun[7]に対する「(i’+1)行の連結調査処理」を行う。(i’+1)行の連結調査処理は、図8〜図10のフローチャートに示す処理手順によって行われる。
図8〜図10のフローチャートの処理は前述した通りであるので、ここでは詳細な説明は省略する。この場合、まず、連結調査ラン(Run[12])と注目ラン(Run[7])との連結調査を行う。この連結調査により、連結調査ラン(Run[12])は注目ラン(Run[7])に連結すると判定され、連結調査ラン(Run[12])には注目ラン(Run[7])と同じラベル値「3」が付与される。これにより、連結調査ラン(Run[12])に対応するランデータは、「16,20,0,3」から、「16,20,3,3」となる(図11の処理P11)。また、スタックにRun[12]のランインデクス「12」が格納される(図11の処理P12)。
続いて、連結調査ランインデクス「k’’’」の増加方向の連結調査ラン(Run[1
3])と注目ラン(Run[7])との連結調査処理を行う。この連結調査により、連結調
査ラン(Run[13])は注目ラン(Run[7])に連結しないと判定される(図11の処理P13)。続いて、連結調査ランインデクス「k’’’」の減少方向の連結調査ラン(Run[11])と注目ラン(Run[7])との連結調査処理を行う。この連結調査により、連結調査ラン(Run[11])は注目ラン(Run[7])に連結しないと判定される(図11の処理P14)。
3])と注目ラン(Run[7])との連結調査処理を行う。この連結調査により、連結調
査ラン(Run[13])は注目ラン(Run[7])に連結しないと判定される(図11の処理P13)。続いて、連結調査ランインデクス「k’’’」の減少方向の連結調査ラン(Run[11])と注目ラン(Run[7])との連結調査処理を行う。この連結調査により、連結調査ラン(Run[11])は注目ラン(Run[7])に連結しないと判定される(図11の処理P14)。
続いて、スタックからランインデクス「12」を取り出し(図11の処理P15)、Run[12]に対応するランデータ「16,20,3,3」をセットする(図11の処理P16)。
そして、Run[12]を注目ランとして、「(i’−1)行の連結調査処理」を行う。この(i’−1)行の連結調査処理は、図5〜図8のフローチャートに示す処理手順によって行われる。図5〜図8のフローチャートの処理は前述した通りであるので、ここでは詳細な説明は省略する。この場合、まず、連結調査ラン(Run[7])と注目ラン(Run[12])との連結調査を行うが、Run[7]はすでに同ラベル値が付されている(図11の処理P17)。
続いて、連結調査ランインデクス「k’’’」の増加方向の連結調査ラン(Run[8])と注目ラン(Run[12])との連結調査処理を行うと、連結調査ラン(Run[8])は注目ラン(Run[12])に連結しないと判定される(図11の処理P18)。同様に、連結調査ランインデクス「k’’’」の減少方向の連結調査ラン(Run[6])と注目ラン(Run[12])との連結調査処理を行うと、連結調査ラン(Run[6])は注目ラン(Run[12])に連結しないと判定される(図11の処理P19)。
以下同様の処理を行うことにより、図11に示すような結果が得られる。これにより、図1に示す2値画像データにおけるRun[2]、Run[7]、Run[12]、Run[1
7]、Run[22]で構成される連結領域A3にはラベル値「3」が付与される。連結領
域A3にラベル値「3」が付与されたあと、さらに、Run[3]から同様の処理を行うことにより、図1に示す2値画像データにおけるRun[3]、Run[8]、Run[13]、Run[18]、Run[23]で構成される連結領域A4にはラベル値「4」が付与され、続いて、Run[4]から同様の処理を行うことにより、図1に示す2値画像データにおけるRun[4]、Run[9]、Run[14]、Run[19]、Run[24] で構成される
連結領域A5にはラベル値「5」が付与される。
7]、Run[22]で構成される連結領域A3にはラベル値「3」が付与される。連結領
域A3にラベル値「3」が付与されたあと、さらに、Run[3]から同様の処理を行うことにより、図1に示す2値画像データにおけるRun[3]、Run[8]、Run[13]、Run[18]、Run[23]で構成される連結領域A4にはラベル値「4」が付与され、続いて、Run[4]から同様の処理を行うことにより、図1に示す2値画像データにおけるRun[4]、Run[9]、Run[14]、Run[19]、Run[24] で構成される
連結領域A5にはラベル値「5」が付与される。
ところで、上述したラベリング処理において、ある注目ラン(例えば、Run[7])と当該注目ラン(Run[7])の存在する行の直後の行に存在するラン(例えばRun[1
2])との連結を調べ、Run[12]がRun[7]が連結すると判定され、その後、Ru
n[12]が注目ランとなったとき、このRun[12]の上の行に存在するランRun[7]及びRun[7]の左右両側に存在するランとの連結を調査するようにしている。
2])との連結を調べ、Run[12]がRun[7]が連結すると判定され、その後、Ru
n[12]が注目ランとなったとき、このRun[12]の上の行に存在するランRun[7]及びRun[7]の左右両側に存在するランとの連結を調査するようにしている。
このように、その時点における注目ラン(Run[12])の上の行に戻って、連結調査を行うのは、Run[7]との直接の連結がなくてもRun[12]と連結するラン(Run[α]とする)がRun[7]と同じ行に存在する可能性があるからである。この場合、Run[7]はRun[12]を介してRun[α]と連結することとなり、このような処理を行うことにより、連結しているランの検出漏れを防ぐことができる。
図12は本発明の実施形態に係る画像データ処理装置の構成を示す図である。本発明の実施形態に係る画像データ処理装置10は、CCDカメラなどの撮像装置20からの撮像データを入力するI/O(入出力部)11、撮像装置20からの撮像データ、撮像データを2値化した2値画像データ、図2に示すラベル値の付与されていないランデータ、図4に示すラベル値の付与後のランデータ(図4はラベル値「2」までが付された状態のランデータである)、ラン数テーブルなどを記憶する大容量の記憶領域としてのRAM12、撮像データを2値化して2値画像データを作成する機能、2値画像データを用いてランレングス化する機能、ラン数テーブルを作成する機能、図3及び図5〜図10に示す処理手順によりラベリング処理を行う機能を有する演算処理装置13、演算処理装置13が各種の処理を行う際のプログラムを格納するROM14などを有している。なお、本発明の画像データ処理装置10は、パーソナルコンピュータ(PCという)を用いることで実現することができる。
本発明の画像データ処理装置10が行うラベリング処理などについては、図1〜図11により詳細に説明したので、その説明は省略する。
本発明の画像データ処理装置10が行うラベリング処理などについては、図1〜図11により詳細に説明したので、その説明は省略する。
なお、本発明は前述の実施形態に限られるものではなく、その要旨を逸脱しない範囲で種々変形実施可能となるものである。たとえば、本発明の実施形態では前述したように、連結調査ランに対応するランデータをアクセスする際の連結調査ランインデクスは、注目ランインデクスと同じ値を設定するようにしたが、これに限られるものではなく、例えば、各行において作成されたランの総数を用いて、前記連結調査ランインデクスを決めるようにしてもよい。
一例として、注目ランの存在する行におけるランの総数と連結調査ランの存在する行におけるランの総数との比に基づいて連結調査ランインデクスを決定するようにしてもよい。具体的には、注目ランの当該行における注目ランインデクスをk、当該行のランの総数をN1、連結調査ランの存在する行のランの総数をN2としたとき、連結調査ランインデクス(前記注目ランの存在する直前または直後の行におけるランインデクス)を、round(k×N2/N1)によって求める。
例えば、注目ランの存在する行のランの総数N1が100個、注目ランの当該行における注目ランインデクスkがk=50、連結調査ランの存在する行のランの総数N2がN2=10個であったとすると、50×10/100=5と求められる。これにより、連結調査ランインデクスは「5」と設定される。なお、「round」は少数点以下の値を丸めて整数とすることを意味する。
また、ラン同士の連結調査を行う際、正方格子状で表現される画素配列において、注目
する画素の真上方向において隣接するか否かを判断する例について説明したが、注目する画素の斜め方向の隣接を考慮するようにしてもよい。この場合、図6に示すステップS63,S64及び図9に示すステップS43,S44において、「Run[N’+k’].end」を+1、「Run[N’+k’].begin」を−1した値を用いて、ステップS63,S64及びステップS43,S44を行えばよい。また、図7に示すステップS73,S74及び図10に示すステップS53,S54において、「Run[N’+k’].begin」を−1、「Run[N’+k’].end」を+1した値を用いて、ステップS73,S74及びステップS53,S54を行えばよい。
する画素の真上方向において隣接するか否かを判断する例について説明したが、注目する画素の斜め方向の隣接を考慮するようにしてもよい。この場合、図6に示すステップS63,S64及び図9に示すステップS43,S44において、「Run[N’+k’].end」を+1、「Run[N’+k’].begin」を−1した値を用いて、ステップS63,S64及びステップS43,S44を行えばよい。また、図7に示すステップS73,S74及び図10に示すステップS53,S54において、「Run[N’+k’].begin」を−1、「Run[N’+k’].end」を+1した値を用いて、ステップS73,S74及びステップS53,S54を行えばよい。
また、前述の実施形態では、図1に示す2値画像データをランレングス化する際、行方向に走査してランレングス化を行うようにしたが、列方向に走査を行うことによってランレングス化することもできる。この場合、連結調査は各列において作成されたランデータ同士の連結の有無を調べる処理を行う。
また、前述の実施形態において説明した画像データ処理装置におけるラベリング処理などの画像データ処理を当該画像データ処理装置に実行させるためのプログラムとしての画像データ処理プログラムを各種の記録媒体に記録させておくことも可能である。したがって、本発明は、画像データ処理プログラムを記録した記録媒体をも含むものである。また、画像データ処理プログラムはネットワークから取得するようにしてもよい。
10・・・画像データ処理装置、11・・・I/O(入出力部)、12・・・RAM、13・・・演算処理装置、14・・・ROM、20・・・撮像装置、k・・・当該行におけるランインデクス(注目ランインデクス、連結調査ランインデクス)
Claims (6)
- 2値画像データをランレングス化することによって作成されたラン同士の連結調査処理を行い、連結しているランに同じラベルを付与する処理を行う画像データ処理方法であって、
ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、
前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行うステップと、
前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行うステップと、
を有することを特徴とする画像データ処理方法。 - 請求項1に記載の画像データ処理方法において、
前記第nの連結調査ランは、前記第1の連結調査ランの左右方向又は上下方向にランが存在する場合には、前記第1の連結調査ランの左右方向又は上下方向に設定することを特徴とする画像データ処理方法。 - 請求項1又は2に記載の画像データ処理方法において、
前記第1の連結調査ランは、前記注目ランの存在する行又は列において前記注目ランに与えられたインデクスと、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在する各ランに与えられたインデクスとに基づいて設定することを特徴とする画像データ処理方法。 - 請求項1又は2に記載の画像データ処理方法において、
前記第1の連結調査ランは、前記注目ランの存在する行又は列に存在するランの総数と前記注目ランの存在する行又は列の直前又は直後の行又は列におけるランの総数との比に基づいて設定することを特徴とする画像データ処理方法。 - 2値画像データをランレングス化することによって作成されたラン同士の連結調査処理を行い、連結しているランに同じラベルを付与する処理を画像データ処理装置において実行させるための画像データ処理プログラムであって、
ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、
前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行うステップと、
前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行うステップと、
を有することを特徴とする画像データ処理プログラム。 - 2値画像データをランレングス化することによって作成されたラン同士の連結調査処理を行い、連結しているランに対して同じラベルを付与する処理を行う画像データ処理装置であって、
ラベル値が付与されていない状態から所定のラベル値が付与されたランを注目ランとし
、前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの前記注目ランとの間で連結調査処理を行うランを連結調査ランとしたとき、
前記注目ランの存在する行又は列の直前又は直後の行又は列に存在するランのうちの所定のランを第1の連結調査ランとして設定し、前記第1の連結調査ランと前記注目ランとの連結調査処理を行う機能と、前記第1の連結調査ランと同じ行又は列に存在するランのうち、前記第1の連結調査ランに隣り合っているランから順に第n(nは2以上の整数)の連結調査ランとして設定し、前記第nの連結調査ランと前記注目ランとの連結調査処理を順次行う機能とを有する演算処理装置を有することを特徴とする画像データ処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007017432A JP2008186124A (ja) | 2007-01-29 | 2007-01-29 | 画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007017432A JP2008186124A (ja) | 2007-01-29 | 2007-01-29 | 画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008186124A true JP2008186124A (ja) | 2008-08-14 |
Family
ID=39729146
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007017432A Withdrawn JP2008186124A (ja) | 2007-01-29 | 2007-01-29 | 画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008186124A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014209310A (ja) * | 2013-03-22 | 2014-11-06 | 大日本スクリーン製造株式会社 | ラベリング方法、ラベリング装置および欠陥検査装置 |
KR20150013040A (ko) * | 2013-07-25 | 2015-02-04 | 아날로그 디바이시즈 테크놀로지 | 이미지 객체 및 윤곽 특징 추출을 위한 시스템, 방법, 및 매체 |
-
2007
- 2007-01-29 JP JP2007017432A patent/JP2008186124A/ja not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014209310A (ja) * | 2013-03-22 | 2014-11-06 | 大日本スクリーン製造株式会社 | ラベリング方法、ラベリング装置および欠陥検査装置 |
KR20150013040A (ko) * | 2013-07-25 | 2015-02-04 | 아날로그 디바이시즈 테크놀로지 | 이미지 객체 및 윤곽 특징 추출을 위한 시스템, 방법, 및 매체 |
US9292763B2 (en) | 2013-07-25 | 2016-03-22 | Analog Devices Global | System, method, and medium for image object and contour feature extraction |
KR101626538B1 (ko) * | 2013-07-25 | 2016-06-01 | 아날로그 디바이시즈 글로벌 | 이미지 객체 및 윤곽 특징 추출을 위한 시스템, 방법, 및 매체 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110136066B (zh) | 面向视频的超分辨率方法、装置、设备和存储介质 | |
JP2007201530A (ja) | 画素欠陥補正装置 | |
JP2008535058A (ja) | 高密度光学シンボルの2段階デコーディングのための装置とプロセス | |
JP5242248B2 (ja) | 欠陥検出装置、欠陥検出方法、欠陥検出プログラム、及び、記録媒体 | |
CN115578585A (zh) | 工业图像异常检测方法、系统、计算机设备和存储介质 | |
JP2007198912A (ja) | 画像検査装置、画像検査方法、コンピュータを画像検査装置として機能させるためのプログラムおよび記録媒体 | |
JP2008186124A (ja) | 画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 | |
CN113256608A (zh) | 工件缺陷检测方法和装置 | |
JPWO2016152190A1 (ja) | 画像処理装置、画像処理システムおよび画像処理方法 | |
CN109671081B (zh) | 一种基于fpga查找表的坏簇统计方法及装置 | |
JP4878239B2 (ja) | 超音波診断装置 | |
JP4890351B2 (ja) | 画像処理装置、画像処理プログラムおよび該画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体、ならびに画像処理方法 | |
JP2008186123A (ja) | 画像データ処理方法、画像データ処理プログラム及び画像データ処理装置 | |
JP3427354B2 (ja) | 映像2値化法及び2値化画像生成法 | |
JP5300666B2 (ja) | ラベリング処理方法、並びにそのシステム、装置及びプログラム | |
JP3512462B2 (ja) | 黒孤立点除去装置 | |
JP2012181148A (ja) | 物体検出装置 | |
JP4720805B2 (ja) | 画像処理装置及びプログラム | |
JP2009124332A (ja) | 画像処理装置、画像処理方法及びプログラム | |
JP6961319B2 (ja) | 評価方法及び評価装置 | |
JP5103436B2 (ja) | 画像処理装置、画像処理方法及び画像処理プログラム | |
JP3080937B2 (ja) | Jbigによる符号化方法およびjbigプログラムを記録した記録媒体 | |
JP2020013225A (ja) | 高画質化学習装置および高画質化装置 | |
WO2004042657A1 (ja) | ラベリング処理装置及び処理方法、並びに画像処理装置 | |
JP4349677B2 (ja) | 画像処理方法、画像処理装置、および画像処理プログラムを記録した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20091002 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20110125 |