渦巻きばねの形状を算出するための画像処理装置、方法、及びプログラム
【課題】 渦巻きばねの撮影画像から芯線を正確に抽出する。
【解決手段】 画像処理装置は、渦巻きばねを撮影した撮影画像を入力する画像入力手段と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出手段と、抽出された輪郭線を極座標変換する座標変換手段と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得手段と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定手段を有している。
【解決手段】 画像処理装置は、渦巻きばねを撮影した撮影画像を入力する画像入力手段と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出手段と、抽出された輪郭線を極座標変換する座標変換手段と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得手段と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定手段を有している。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、渦巻きばねの形状を芯線化(細線化)する技術に関する。ここでいう渦巻きばねとは、平面視したときに、内フックから外フックまで渦巻状に成形されたばねを意味する。
【背景技術】
【0002】
渦巻きばね等の工業製品の品質検査工程では、製品の形状と設計図面に規定された形状との異同を調べ、製品が設計図面のとおりに成形されているか否かが検査される。設計図面に規定された形状とのずれが許容誤差の製品は良品と判定され、設計図面に規定された形状とのずれが許容誤差を超える製品は不良品として廃棄される。渦巻きばねの品質検査工程では、渦巻きばねを撮影し、コンピュータを利用して撮影した画像から渦巻きばねの芯線を抽出し、抽出した芯線と設計図面に規定された形状との異同を検査する。品質検査を適切に行うためには、撮影した画像から渦巻きばねの芯線を精度良く抽出する必要がある。このため、従来から画像処理を用いて物体の形状を芯線化する技術が開発されている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平11−25279号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
特許文献1の技術は、二次元彫刻において行われる線図形(文字等)を芯線化する技術であり、工業製品である機械要素の形状を芯線化する技術ではない。特に、機械要素の一種である渦巻きばねでは、撮影された画像から内フック領域及び外フック領域の位置を正確に特定して芯線化する必要がある。一方、特許文献1の技術は、芯線化する対象が渦巻きばねではないため、内フック領域及び外フック領域の形状特性を考慮していない。その結果、特許文献1の技術では、内フック領域及び外フック領域の位置を正確に特定して芯線化することができない場合がある。本願は、渦巻きばねの撮影画像から内フック領域及び外フック領域の位置を正しく特定することができ、その後の芯線化を適切に行うことを可能とする技術を提供する。
【課題を解決するための手段】
【0005】
本願は、内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するための画像処理装置を開示する。この画像処理装置は、渦巻きばねを撮影した撮影画像を入力する画像入力手段と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出手段と、抽出された輪郭線を極座標変換する座標変換手段と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得手段と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定手段と、を有する。
【0006】
この画像処理装置では、渦巻きばねの撮影画像に対して輪郭線を抽出し、その輪郭線に対して極座標変換を行う。そして、輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する。輪郭線上を一方向に移動しながら一巡すると、内フック及び外フックの位置で周回方向が変化することとなる(すなわち、時計回りから反時計回り、あるいは、反時計回りから時計回り)。したがって、「輪郭線の角座標値列(θ1,θ2,・・,θn)」を用いて、内フック領域及び外フック領域の位置を正確に特定することができる。したがって、その後の芯線化を適切に行うことが可能となる。
【0007】
上記の画像処理装置において、例えば、フック領域特定手段は、前記「輪郭線の角座標値列」が極大値又は極小値となる「画素」を含む所定の領域を、内フック領域又は外フック領域として特定してもよい。「輪郭線の角座標値列」の極大値又は極小値を用いると、内フック領域や外フック領域を正確かつ容易に特定することが可能となる。
【0008】
上記の画像処理装置は、特定された内フック領域内の輪郭線から2つの内フック端点を特定し、それら内フック端点の位置から内フック先端点の位置を算出する内フック先端点算出手段と、特定された外フック領域内の輪郭線から2つの外フック端点を特定し、それら外フック端点の位置から外フック先端点の位置を算出する外フック先端点算出手段と、入力された撮影画像内の渦巻きばねを細線化する細線化手段と、細線化手段で細線化された渦巻きばねの端部を、内フック先端点算出手段で算出した内フック先端点と外フック先端点算出手段で算出した外フック先端点とを用いて修正する細線化画像修正手段と、をさらに備えることが好ましい。
【0009】
このような構成によると、特定された内フック領域から内フック先端点の位置が算出され、また、特定された外フック領域から外フック先端点の位置が算出され、これら算出された内フック先端点及び外フック先端点の位置を用いて細線化画像が修正される。このため、渦巻きばねの両端を正確に細線化することができる。
【0010】
また、本願は、渦巻きばねの形状を芯線化するための画像処理方法を開示する。この画像処理方法は、コンピュータに、渦巻きばねを撮影した撮影画像を入力する画像入力処理と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、抽出された輪郭線を極座標変換する座標変換処理と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理を実行させる。
この方法によっても、渦巻きばねの撮影画像から内フック領域及び外フック領域の位置を正しく特定することができ、その後の芯線化を適切に行うことが可能となる。
【0011】
本願はさらに、渦巻きばねの形状を芯線化するためのプログラムを開示する。このプログラムは、コンピュータに、渦巻きばねを撮影した撮影画像を入力する画像入力処理と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、抽出された輪郭線を極座標変換する座標変換処理と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理を実行させる。
このプログラムにより、コンピュータを用いて、渦巻きばねの撮影画像から内フック領域及び外フック領域の位置を正しく特定することができ、その後の芯線化を適切に行うことが可能となる。
【図面の簡単な説明】
【0012】
【図1】画像処理装置の構成を示す図。
【図2】画像処理装置による細線化(芯線化)の流れを示すフローチャート。
【図3】フック領域を特定する処理の流れを示すフローチャート。
【図4】渦巻きばねの撮影画像を示す図。
【図5】渦巻きばねの撮影画像から抽出された輪郭線を示す図。
【図6a】輪郭線を極座標変換することで得られた角座標値列のグラフ。
【図6b】図6aのグラフの不連続点を接続することで得られる角座標値列のグラフ。
【図7】特定された内フック領域を拡大して示す図。
【図8】特定された外フック領域を拡大して示す図。
【図9】特定された外フック領域をトリミングする処理を説明するための図。
【図10】トリミングされた外フック領域を拡大して示す図。
【図11】外フック端点を特定する処理を説明するための図。
【図12】撮影画像(二値化画像)を細線化した細線化画像を示す図。
【図13】撮影画像(二値化画像)を収縮させた収縮画像を示す図。
【図14】細線化画像と収縮画像から得られる細線化画像を示す図。
【図15】図14の細線化画像から「ひげ」を削除する処理と、「フック先端」の補正処理を説明するための図(その1)。
【図16】図14の細線化画像から「ひげ」を削除する処理と、「フック先端」の補正処理を説明するための図(その2)。
【図17】「ひげ」を削除した後の細線化画像を示す図。
【図18】「フック先端」の補正処理後の細線化画像を示す図。
【図19】外フック領域の形状が相違する渦巻きばねの一例を示す図。
【図20】外フック領域の形状が相違する渦巻きばねの他の例を示す図。
【発明を実施するための最良の形態】
【0013】
(実施例) 図1に示すように、本実施例の画像処理装置10は、渦巻きばね30を撮影し、撮影した画像から渦巻きばね30の細線化画像(芯線化画像)を出力する装置である。画像処理装置10は、ステージ12と、ステージ12上に配置された照明器14と、ステージ12に固定されているCCDカメラ16と、CCDカメラ16に通信線18を介して接続されているコンピュータ22と、コンピュータ22に接続されているディスプレイ20を備えている。
【0014】
照明器14は、面光源であり、その発光面上に渦巻きばね30が載置される。CCDカメラ16は、照明器14上に配置されており、照明器14上に載置された渦巻きばね30を撮影する。即ち、渦巻きばね30は照明器14によって下方から照明され、照明器14の透過光(渦巻きばね30の影)がCCDカメラ16によって撮影される。なお、照明器14は、本実施例のような透過照明に限定されず、渦巻きばね30を上方から照明するものでもよい。この場合、渦巻きばね30が全周方向から均等に照明されるように、複数の照明器やリング型の照明器を用いることが好ましい。
【0015】
CCDカメラ16が撮影した画像データは、通信線18を介してコンピュータ22に入力される。コンピュータ22には、後述する各種画像処理を実行するためのプログラムが記憶されている。コンピュータ22は、CCDカメラ16が撮影した撮影画像の画像データを処理し、渦巻きばね30の細線化画像を作成する。コンピュータ22は、作成した渦巻きばね30の細線化画像を、ディスプレイ20に表示する。
【0016】
図2は、画像処理装置10による渦巻きばね30の細線化の流れを示すフローチャートである。図3は、図2のフローチャートに示すステップS18のフック領域の特定処理、及び、ステップS20のフック先端点算出処理の流れを示すフローチャートである。画像処理装置10は、図2、図3に示す工程、処理を経て、渦巻きばね30の細線化画像を作成する。以下、図2、図3に示すフローチャートに沿って、画像処理装置10による処理の流れを説明する。
【0017】
先ず、図2のステップS10において、CCDカメラ16により、渦巻きばね30の撮影を行う。CCDカメラ16により撮影された撮影画像は、コンピュータ22に入力される。入力される撮影画像は、例えば、最も黒い画素の濃度値を「255」とし、最も白い画素の濃度値を「0」とする256階調の画像とすることができる。図4に、渦巻きばね30の撮影画像を例示する。図4に示すように、渦巻きばね30は、内フック32から外フック34まで、渦巻状に伸びている。撮影画像は、画素(x,y)毎に濃度値を有する濃度値画像である。
【0018】
次に、図2のステップS12では、ステップS10で撮影された撮影画像を二値化する。すなわち、入力された撮影画像の各画素(x,y)に対して、濃度値が予め設定された設定値以上となる場合は「1」とし、濃度値が予め設定された設定値未満となる場合は「0」とする。これによって、渦巻きばね30に対応する部分の画素群が濃度値「1」となり、それ以外の画素群が濃度値「0」となる。なお、CCDカメラ16により撮影された画像はノイズを含むため、二値化画像もノイズを含んでいる。このため、渦巻きばね30に対応しない部分の画素にも濃度値「1」となるものが存在する。なお、このステップS12から後述するS30までの処理は、コンピュータ22によって実行される。
【0019】
次に、図2のステップS14では、ステップS12で得られた二値化画像を用いて、渦巻きばね30の重心(cx,cy)を算出する。具体的には、濃度値が「1」となる画素群(すなわち、渦巻きばね30に対応する部分の画素群)の座標値(x、y)から、その重心(cx,cy)を計算する。図4に示す例では、渦巻きばね30の略中央に重心(cx,cy)が位置している。
【0020】
次に、図2のステップS16では、ステップS12で得られた二値化画像から輪郭線を抽出する。二値化画像から輪郭線を抽出する処理は、公知の方法(例えば、長谷川純一,輿水大和,中山晶,横井茂樹著,「画像処理の基本技法<技術入門編>」,技術評論社,p.70−73)を用いることができる。図5に、渦巻きばね30の二値化画像から抽出された輪郭線の例が示されている。
【0021】
なお、本実施例では、ステップS16で抽出される輪郭線は、画素番号i(i=0〜n)と、その画素番号iに対応する画素の座標値(xi,yi)で表される。画素番号iは、輪郭線上の画素に付与された番号であり、以下の規則に従って付与される。すなわち、輪郭線上に設定された1つの画素を原点として、その画素に画素番号i=0を付与する。原点は、輪郭線上の任意の点に設定することができる。次いで、その原点と隣接する画素に画素番号1を付与する。ここで、原点となる画素には、輪郭線上を時計回りに移動する方向に隣接する画素と、反時計回りに移動する方向に隣接する画素の2通りがある。本実施例では、原点と隣接する画素のうち、反時計回りに移動する方向に隣接する画素に画素番号1を付与する。次いで、画素番号1の画素に隣接する画素に画素番号2を付与し、以下、同様の手順で画素番号を付与する。これによって、輪郭線を構成する全ての画素に画素番号が付与される。上述した説明から明らかなように、画素番号iの画素から画素番号nの画素まで順に移動すると、輪郭線上を一方向に一巡することとなる。なお、本明細書では、画素番号0からnまでの座標値列(x0,y0),(x2,y2)・・(xn,yn)を輪郭線系列(xi,yi)(i=0〜n)という。
【0022】
次に、図2のステップS17では、ステップS16で得られた輪郭線系列(xi,yi)(i=0〜n)を極座標による輪郭線系列(ri,θi)(i=0〜n)に変換する。すなわち、図5に示すように、xy座標系による輪郭線系列(xi,yi)を、ステップS14で算出された重心(cx,cy)を原点として、動径riと偏角θiにより表す。図5に示すように、動径riは、原点(cx,cy)と輪郭線系列(xi,yi)の距離である。偏角θiは、原点(cx,cy)と輪郭線系列(xi,yi)とを結んだ直線と、x軸とのなす角である。したがって、ステップS32によって、xy座標系の輪郭線系列(cx,cy)(i=0〜n)は、極座標系の輪郭線系列(ri,θi)(i=0〜n)に変換される。ここで、極座標系の輪郭線系列(ri,θi)から得られる角座標値列θi(i=0〜n)をグラフ化すると、図6aに示すグラフとなる。図6aに示すグラフでは、縦軸が偏角θiであり、横軸が画素番号(輪郭線要素番号)iとなっている。図6aから明らかなように、角座標値列θiは−180°〜+180°の範囲の数値を有し、−180°と+180°において不連続となっている。
【0023】
次に、図2のステップS18,20では、ステップS17で極座標変換された輪郭線系列(ri,θi)(i=0〜n)から、フック領域を特定すると共に、フック先端点を算出する処理を行う。これらの処理について、図3に示すフローチャ−トに沿って説明する。
【0024】
先ず、図3のステップS34,S36では、図2のステップS17で作成した極座標系の輪郭線系列(ri,θi)(i=0〜n)から、内フック領域と外フック領域を抽出する。本実施例では、輪郭線系列(ri,θi)(i=0〜n)のうち、角座標値列θi(i=0〜n)の特性を利用して、内フック領域Aと外フック領域Bを特定する。
【0025】
なお、図6aに示すグラフでは、角座標値列θi(i=0〜n)が−180°〜+180°の範囲とされ、角座標値列θiには不連続点が存在する。ステップS34以降の処理は、図6aに示すグラフの不連続点をつなぎ合わせた角座標値列(図6b)を用いて行ってもよいし、不連続点を残した角座標値列(図6a)を用いて行ってもよい。
【0026】
上述したことから明らかなように、輪郭線系列(ri,θi)(i=0〜n)は、輪郭線上を原点から反時計回りに移動を開始し、輪郭線を一巡することで画素番号が付与されている。このため、渦巻きばねを内側から見て右巻きにセットした場合では、原点から内フック端点(又は外フック端点)までは反時計回りに移動しながら画素番号が付与され、内フック端点(又は外フック端点)から外フック端点(又は内フック端点)までは時計回りに移動しながら画素番号が付与され、外フック端点(又は内フック端点)から原点までは反時計回りに移動しながら画素番号が付与される。したがって、不連続点を接続したグラフ(図6b)では、原点から内フック端点(又は外フック端点)までは角座標値列θi(i=0〜n)は単調減少(又は単調増加)し、内フック端点(又は外フック端点)から外フック端点(又は内フック端点)までは角座標値列θi(i=0〜n)は単調増加(又は単調減少)し、外フック端点(又は内フック端点)から原点までは角座標値列θi(i=0〜n)は単調減少(又は単調増加)する。したがって、図6bに示すように、角座標値列θi(i=0〜n)の関数は、内フック端点の近傍で極小値をとり、外フック端点の近傍で極大値をとる。
【0027】
そこで、ステップS34では、角座標値列θi(i=0〜n)が極小値となる部分を含む領域Aを内フック領域として特定する。例えば、図6aに示すように、内フック領域Aとして、極小値に隣接して角座標値θa1が180°となる画素番号a1から角座標値θa2が180°となる画素番号a2までの領域を特定し、この領域(a1〜a2)内に極小値が含まれるようにする。図7には、特定された内フック領域Aの輪郭線系列が示されている。図7より明らかなように、特定された内フック領域Aに内フック端点が含まれている。
【0028】
また、ステップS36では、角座標値列θi(i=0〜n)が極大値となる部分を含む領域Bを外フック領域として特定する。例えば、図6aに示すように、外フック領域Bとして、極大値に隣接して角座標値θb1が−180°となる画素番号b1から角座標値θb2が−180°となる画素番号b2までの領域を特定し、この領域(b1〜b2)内に極大値が含まれるようにする。図8には、特定された外フック領域Bの輪郭線系列が示されている。図8より明らかなように、特定された外フック領域Bに外フック端点が含まれている。
【0029】
なお、図7と図8の比較から明らかなように、外フック領域Bは、内フック領域Aに比較して広い領域となっている。すなわち、特定した外フック領域B(rk,θk)(k=b1〜b2)が広い場合には、図9に示すように、外フック領域Bのトリミングを行うことが好ましい。図9に示す例では、極大値imaxから角度α(例えば、40°)の角度範囲を新しい外フック領域B’(rk,θk)(k=b1’〜b2’)として新たに切り出している。図10は、トリミング後の外フック領域B’を示している。図10より明らかなように、トリミング後の外フック領域B’は、トリミング前の外フック領域Bと比較して適切な大きさに修正されている。これによって、次のステップS40で行われるフック先端点の算出処理の計算量を少なくすることができる。なお、上述の例では、外フック領域Bが広いため、外フック領域Bをトリミングしたが、内フック領域Aが外フック領域Bより広い場合には、内フック領域Aをトリミングしてもよい。さらには、内フック領域Aと外フック領域Bの両者をトリミングするようにしてもよい。
【0030】
また、図6bに示すグラフでは、内フック領域Aで極小値をとり、外フック領域Bで極大値をとったが、渦巻きばねの巻き方向が逆となれば、当然、内フック領域で極大値をとり、外フック領域で極小値をとることとなる。
【0031】
次に、ステップS38では、ステップS34で特定した内フック領域A(xk,yk)(k=a1〜a2)から2つの内フック端点を特定し、その2つの内フック端点から内フック先端点の座標値(xac,yac)を算出する。また、ステップS40では、ステップS36で特定した外フック領域B’(xk,yk)(k=b1’〜b2’)から2つの外フック端点を特定し、その2つの外フック端点から外フック先端点の座標値(xbc,ybc)を算出する。なお、ステップS38とステップS40の処理は、対象とする領域が内フック領域Aか外フック領域Bかで相違するものの、その処理手順は同一である。このため、ここではステップS40の処理、すなわち、外フック端点を特定し、その特定した外フック端点から外フック先端点の座標値(xbc,ybc)を求める処理の一例について説明する。
【0032】
図11に示すように、外フック領域B’(xk,yk)(k=b1’〜b2’)内には外フック端点が2つ存在し、これら2つの外フック端点では輪郭線が略直交している。すなわち、渦巻きばね30は、ばね素線(板材)を渦巻状に成形することで製造されるため、外フック領域Bには2つの外フック端点が存在し、それら2つの外フック端点では輪郭線が略直交する。したがって、まず、ステップS36で特定した輪郭線系列B’(xk,yk)(k=b1’〜b2’)内から、輪郭線が略直交する点を抽出する。この処理は、例えば、外フック領域B’を構成する各輪郭線系列B’(xk,yk)(k=b1’〜b2’)のそれぞれに対して、図11に示すようにベクトルp(k)とm(k)を設定し、これらのベクトルp(k)とm(k)が直交するか否かで抽出することができる。p(k)、m(k)は、例えば、次の式(1)で表すことができる。
【0033】
【数1】
【0034】
上記の式(1)から明らかなように、m(k)は、輪郭線上の点(xk,yk)からN画素だけ前の輪郭線上の各点までの輪郭線系列(xk−N、yk−N),(xk−(N―1),yk−(N―1)),・・,(xk,yk)が向いている方向を平均したものである。また、p(k)は、輪郭線上の点(xk,yk)からN画素だけ後ろの輪郭線上の各点までの輪郭線列(xk,yk),(xk+1,yk+1),・・,(xk+N,yk+N)が向いている方向を平均したものである。なお、本実施例では、ベクトルm(k)、p(k)を算出するために0〜N画素の範囲を用いた。ここで、設定値Nは、ステップS10で撮影された画像内における、渦巻きばね30の素線の板厚に応じて設定することが好ましい。例えば、撮影された画像内において、渦巻きばね30の素線の板厚が約X画素となる場合は、設定値NをX/2とすることができる。このように、撮影された画像内において、渦巻きばね30の板厚が何画素分の長さに相当するかで、m(k)及びp(k)を算出する画素数を設定することが好ましい。
【0035】
上述したように、ベクトルm(k)とベクトルp(k)を算出すると、次に、ベクトルp(k)とベクトルm(k)が直交するか否かを判定する。ベクトルp(k)とベクトルm(k)が直交するか否かを判定するには、例えば、ベクトルp(k)とベクトルm(k)から算出されるcosθkを用いることができる(下記の式(2)参照)。ここで、θkは、ベクトルp(k)とベクトルm(k)のなす角度である。
【0036】
【数2】
【0037】
フックの端点では、ベクトルm(k)とベクトルp(k)は略直交する。ベクトルm(k)とベクトルp(k)が略直交すると、θk≒90°となり、cosθk≒0となる。したがって、cosθk≒0となる2つのkを探索することで、輪郭線系列からフック端点に相当する点(2点)を特定することができる。
【0038】
なお、本実施例では、輪郭線から2つのベクトルm(k)とp(k)を算出し、cosθを用いてフック端点を算出したが、cosθの代わりに、sinθ又はtanθを用いてフック端点を特定してもよい。また、ベクトルm(k)とp(k)を用いる代わりに、渦巻きばねの外形を表す直線式(近似した直線式)を算出し、直線の直交条件(2つの直線の傾きの積が−1となること)を用いてフック端点を特定してもよい。また、テンプレートマッチング等を用いてフック端点を特定してもよい。
【0039】
上記のように特定した外フック端点をPa(xpa,ypa)、内フック端点をPb(xpb,ypb)と記すこととする。外フック端点Paと内フック端点Pbを特定すると、この2つの外フック端点Pa(xpa,ypa),Pb(xpb,ypb)の中点を算出し、この算出した中点を外フック先端点の座標値(xbc,ybc)とする。なお、既に説明したように、内フック先端点の座標値(xac,yac)は、上述した外フック先端点の座標値(xbc,ybc)を求める手順と同様の手順で求めることができる。
【0040】
上記のようにして内フック先端点及び外フック先端点の座標値を算出すると、次に、図2のステップS22に進み、ステップS10で撮影された撮影画像内の渦巻きばね30を細線化することで細線化画像を作成する。撮影された画像内の渦巻きばね30を細線化する方法としては、従来公知の方法(例えば、上述した「画像処理の基本技法<技術入門編>」(長谷川純一,輿水大和,中山晶,横井茂樹著/技術評論社)に開示の方法等)を用いることができる。図12は、ステップS22によって作成される細線化画像の一例を示している。ステップS10で撮影された撮影画像内に多くのノイズが含まれている場合は、図12に示すように、ステップS22で得られる細線化画像にも多くのノイズ(いわゆる、「ループ」)が含まれている。
【0041】
次に、図2のステップS24では、まず、ステップS12で得られた二値化画像を収縮して収縮画像(図13)を作成する。次いで、作成した収縮画像(図13)とステップS22で得られた細線化画像(図12)とのAND条件(すなわち、両画像において渦巻きばねとされている点)をとり、新しい細線化画像(図14、図15)を作成する。図14、17より明らかなように、新しい細線化画像では「ループ」状のノイズが切断され、「ひげ」状のノイズのみが残っている。なお、二値化画像から収縮画像を得る方法としては、従来公知の方法(例えば、上述した「画像処理の基本技法<技術入門編>」(長谷川純一,輿水大和,中山晶,横井茂樹著/技術評論社)に開示の方法等)を用いることができる。
【0042】
次に、図2のステップS26では、ステップS24で作成された細線化画像に含まれる「ひげ」状のノイズを削除する。図15に示すように、ステップS24で作成された細線化画像には、内フック先端点と外フック先端点の近傍以外にも、多くの「ひげ」状のノイズが含まれている。そこで、内フック先端点の最近傍の「ひげ」状のノイズと外フック先端点の最近傍の「ひげ」状のノイズは、後述する処理で削除することとし、まずは、それ以外の「ひげ」状のノイズを削除する(図16参照)。これによって、内フック先端点近傍及び/又は外フック先端点近傍に1個の「ひげ」状のノイズのみが残ることとなる。
【0043】
ステップS24で作成された細線化画像の外フック及び内フック先端点の近傍はY字状に分岐した形状を有する(図15参照)。この細線化画像にステップS26の処理を行うことで、内フック先端点近傍及び外フック先端点近傍のY字状分岐の一方が削除される。例えば、図16に示すように、Y字状に分岐した外フック先端点のうち、ステップS40で算出した外フック先端点の座標値(xbc,ybc)に近い方が残され、遠い方が削除される。図16に示す例では、図中、上側の分岐が残され、下側の分岐が削除される。なお、内フック先端点についても、上記と同様に処理することができる。ステップS26の処理を行うことで、図17に示す細線化画像が得られる。
【0044】
上記のようにして、細線化画像から全ての「ひげ」状のノイズが削除されると、図2のステップS28に進み、細線化画像の内フック先端点から予め設定されたn個の画素を削除し、削除後に先端となる点とステップS38で算出した内フック先端点(xac,yac)とを接続する。また、細線化画像の外フック先端点から予め設定されたn個の画素を削除し、削除後の先端となる点とステップS40で算出した外フック先端点(xbc,ybc)とを接続する。これによって、ステップS28の処理が終了する。ステップS28の処理により、ひげ状のノイズが全て削除された細線化画像(図18)が得られる。
【0045】
次に、図2のステップS30では、ステップS28で得られた細線化画像を平滑化して、最終的な細線化画像(芯線画像(図18参照))を作成する。細線化画像を平滑化する方法としては、従来公知の方法(例えば、スプライン補間、最小二乗法、デジタルフィルタによる平滑化法等)を用いることができる。
【0046】
上述したように、本実施例の画像処理装置10では、撮影された画像から渦巻きばね30の輪郭線系列(xi,yi)(i=0〜n)を抽出し、その抽出した輪郭線系列を極座標変換して輪郭線系列(ri,θi)(i=0〜n)とする。そして、角座標値列θi(i=0〜n)の特性から、内フック領域A及び外フック領域Bを特定する。このため、正確に内フック領域A及び外フック領域Bを特定することができる。また、内フック領域A及び外フック領域Bを正確に特定することができるため、内フック端点及び外フック端点も正確に特定することができる。
【0047】
また、内フック領域A及び外フック領域Bを特定する処理、及び、内フック端点及び外フック端点を特定する処理は、撮影された画像から抽出された渦巻きばね30の輪郭線系列(xi,yi)(i=0〜n)を利用して行われる。このため、画像処理するデータ量を少なくすることができ、短時間で処理を完了することができる。
【0048】
さらに、正確に算出された内フック先端点及び外フック先端点等を用いて、細線化画像からノイズ成分である「ループ」及び「ひげ」を削除する。このため、細線化画像から適切にノイズ成分が削除され、正確な細線化画像(芯線化画像)を得ることができる。
【0049】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
【0050】
例えば、上述した実施例では、極座標変換するときの原点として、渦巻きばね30の重心(cx,cy)を用いたが、本発明は、このような実施形態に限られない。例えば、極座標変換するときの原点は、渦巻きばね30の内側ではなく、渦巻きばね30の外側に設定してもよい。また、本願の技術は、図4に示すフック形状を有する渦巻きばねを芯線化できるだけではなく、種々のフック形状を有する渦巻きばねを芯線化することができる。例えば、図19、20に示すような、切り放しタイプの外フック形状を有する渦巻きばねを芯線化することもできる。
【0051】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時の請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は、複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【0052】
10:画像処理装置
12:ステージ
14:照明器
16:CCDカメラ
18:通信線
20:ディスプレイ
22:コンピュータ
30:渦巻きばね
32:渦巻きばねの内フック
34:渦巻きばねの外フック
【技術分野】
【0001】
本願は、渦巻きばねの形状を芯線化(細線化)する技術に関する。ここでいう渦巻きばねとは、平面視したときに、内フックから外フックまで渦巻状に成形されたばねを意味する。
【背景技術】
【0002】
渦巻きばね等の工業製品の品質検査工程では、製品の形状と設計図面に規定された形状との異同を調べ、製品が設計図面のとおりに成形されているか否かが検査される。設計図面に規定された形状とのずれが許容誤差の製品は良品と判定され、設計図面に規定された形状とのずれが許容誤差を超える製品は不良品として廃棄される。渦巻きばねの品質検査工程では、渦巻きばねを撮影し、コンピュータを利用して撮影した画像から渦巻きばねの芯線を抽出し、抽出した芯線と設計図面に規定された形状との異同を検査する。品質検査を適切に行うためには、撮影した画像から渦巻きばねの芯線を精度良く抽出する必要がある。このため、従来から画像処理を用いて物体の形状を芯線化する技術が開発されている(例えば、特許文献1)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平11−25279号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
特許文献1の技術は、二次元彫刻において行われる線図形(文字等)を芯線化する技術であり、工業製品である機械要素の形状を芯線化する技術ではない。特に、機械要素の一種である渦巻きばねでは、撮影された画像から内フック領域及び外フック領域の位置を正確に特定して芯線化する必要がある。一方、特許文献1の技術は、芯線化する対象が渦巻きばねではないため、内フック領域及び外フック領域の形状特性を考慮していない。その結果、特許文献1の技術では、内フック領域及び外フック領域の位置を正確に特定して芯線化することができない場合がある。本願は、渦巻きばねの撮影画像から内フック領域及び外フック領域の位置を正しく特定することができ、その後の芯線化を適切に行うことを可能とする技術を提供する。
【課題を解決するための手段】
【0005】
本願は、内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するための画像処理装置を開示する。この画像処理装置は、渦巻きばねを撮影した撮影画像を入力する画像入力手段と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出手段と、抽出された輪郭線を極座標変換する座標変換手段と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得手段と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定手段と、を有する。
【0006】
この画像処理装置では、渦巻きばねの撮影画像に対して輪郭線を抽出し、その輪郭線に対して極座標変換を行う。そして、輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する。輪郭線上を一方向に移動しながら一巡すると、内フック及び外フックの位置で周回方向が変化することとなる(すなわち、時計回りから反時計回り、あるいは、反時計回りから時計回り)。したがって、「輪郭線の角座標値列(θ1,θ2,・・,θn)」を用いて、内フック領域及び外フック領域の位置を正確に特定することができる。したがって、その後の芯線化を適切に行うことが可能となる。
【0007】
上記の画像処理装置において、例えば、フック領域特定手段は、前記「輪郭線の角座標値列」が極大値又は極小値となる「画素」を含む所定の領域を、内フック領域又は外フック領域として特定してもよい。「輪郭線の角座標値列」の極大値又は極小値を用いると、内フック領域や外フック領域を正確かつ容易に特定することが可能となる。
【0008】
上記の画像処理装置は、特定された内フック領域内の輪郭線から2つの内フック端点を特定し、それら内フック端点の位置から内フック先端点の位置を算出する内フック先端点算出手段と、特定された外フック領域内の輪郭線から2つの外フック端点を特定し、それら外フック端点の位置から外フック先端点の位置を算出する外フック先端点算出手段と、入力された撮影画像内の渦巻きばねを細線化する細線化手段と、細線化手段で細線化された渦巻きばねの端部を、内フック先端点算出手段で算出した内フック先端点と外フック先端点算出手段で算出した外フック先端点とを用いて修正する細線化画像修正手段と、をさらに備えることが好ましい。
【0009】
このような構成によると、特定された内フック領域から内フック先端点の位置が算出され、また、特定された外フック領域から外フック先端点の位置が算出され、これら算出された内フック先端点及び外フック先端点の位置を用いて細線化画像が修正される。このため、渦巻きばねの両端を正確に細線化することができる。
【0010】
また、本願は、渦巻きばねの形状を芯線化するための画像処理方法を開示する。この画像処理方法は、コンピュータに、渦巻きばねを撮影した撮影画像を入力する画像入力処理と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、抽出された輪郭線を極座標変換する座標変換処理と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理を実行させる。
この方法によっても、渦巻きばねの撮影画像から内フック領域及び外フック領域の位置を正しく特定することができ、その後の芯線化を適切に行うことが可能となる。
【0011】
本願はさらに、渦巻きばねの形状を芯線化するためのプログラムを開示する。このプログラムは、コンピュータに、渦巻きばねを撮影した撮影画像を入力する画像入力処理と、入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、抽出された輪郭線を極座標変換する座標変換処理と、極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理を実行させる。
このプログラムにより、コンピュータを用いて、渦巻きばねの撮影画像から内フック領域及び外フック領域の位置を正しく特定することができ、その後の芯線化を適切に行うことが可能となる。
【図面の簡単な説明】
【0012】
【図1】画像処理装置の構成を示す図。
【図2】画像処理装置による細線化(芯線化)の流れを示すフローチャート。
【図3】フック領域を特定する処理の流れを示すフローチャート。
【図4】渦巻きばねの撮影画像を示す図。
【図5】渦巻きばねの撮影画像から抽出された輪郭線を示す図。
【図6a】輪郭線を極座標変換することで得られた角座標値列のグラフ。
【図6b】図6aのグラフの不連続点を接続することで得られる角座標値列のグラフ。
【図7】特定された内フック領域を拡大して示す図。
【図8】特定された外フック領域を拡大して示す図。
【図9】特定された外フック領域をトリミングする処理を説明するための図。
【図10】トリミングされた外フック領域を拡大して示す図。
【図11】外フック端点を特定する処理を説明するための図。
【図12】撮影画像(二値化画像)を細線化した細線化画像を示す図。
【図13】撮影画像(二値化画像)を収縮させた収縮画像を示す図。
【図14】細線化画像と収縮画像から得られる細線化画像を示す図。
【図15】図14の細線化画像から「ひげ」を削除する処理と、「フック先端」の補正処理を説明するための図(その1)。
【図16】図14の細線化画像から「ひげ」を削除する処理と、「フック先端」の補正処理を説明するための図(その2)。
【図17】「ひげ」を削除した後の細線化画像を示す図。
【図18】「フック先端」の補正処理後の細線化画像を示す図。
【図19】外フック領域の形状が相違する渦巻きばねの一例を示す図。
【図20】外フック領域の形状が相違する渦巻きばねの他の例を示す図。
【発明を実施するための最良の形態】
【0013】
(実施例) 図1に示すように、本実施例の画像処理装置10は、渦巻きばね30を撮影し、撮影した画像から渦巻きばね30の細線化画像(芯線化画像)を出力する装置である。画像処理装置10は、ステージ12と、ステージ12上に配置された照明器14と、ステージ12に固定されているCCDカメラ16と、CCDカメラ16に通信線18を介して接続されているコンピュータ22と、コンピュータ22に接続されているディスプレイ20を備えている。
【0014】
照明器14は、面光源であり、その発光面上に渦巻きばね30が載置される。CCDカメラ16は、照明器14上に配置されており、照明器14上に載置された渦巻きばね30を撮影する。即ち、渦巻きばね30は照明器14によって下方から照明され、照明器14の透過光(渦巻きばね30の影)がCCDカメラ16によって撮影される。なお、照明器14は、本実施例のような透過照明に限定されず、渦巻きばね30を上方から照明するものでもよい。この場合、渦巻きばね30が全周方向から均等に照明されるように、複数の照明器やリング型の照明器を用いることが好ましい。
【0015】
CCDカメラ16が撮影した画像データは、通信線18を介してコンピュータ22に入力される。コンピュータ22には、後述する各種画像処理を実行するためのプログラムが記憶されている。コンピュータ22は、CCDカメラ16が撮影した撮影画像の画像データを処理し、渦巻きばね30の細線化画像を作成する。コンピュータ22は、作成した渦巻きばね30の細線化画像を、ディスプレイ20に表示する。
【0016】
図2は、画像処理装置10による渦巻きばね30の細線化の流れを示すフローチャートである。図3は、図2のフローチャートに示すステップS18のフック領域の特定処理、及び、ステップS20のフック先端点算出処理の流れを示すフローチャートである。画像処理装置10は、図2、図3に示す工程、処理を経て、渦巻きばね30の細線化画像を作成する。以下、図2、図3に示すフローチャートに沿って、画像処理装置10による処理の流れを説明する。
【0017】
先ず、図2のステップS10において、CCDカメラ16により、渦巻きばね30の撮影を行う。CCDカメラ16により撮影された撮影画像は、コンピュータ22に入力される。入力される撮影画像は、例えば、最も黒い画素の濃度値を「255」とし、最も白い画素の濃度値を「0」とする256階調の画像とすることができる。図4に、渦巻きばね30の撮影画像を例示する。図4に示すように、渦巻きばね30は、内フック32から外フック34まで、渦巻状に伸びている。撮影画像は、画素(x,y)毎に濃度値を有する濃度値画像である。
【0018】
次に、図2のステップS12では、ステップS10で撮影された撮影画像を二値化する。すなわち、入力された撮影画像の各画素(x,y)に対して、濃度値が予め設定された設定値以上となる場合は「1」とし、濃度値が予め設定された設定値未満となる場合は「0」とする。これによって、渦巻きばね30に対応する部分の画素群が濃度値「1」となり、それ以外の画素群が濃度値「0」となる。なお、CCDカメラ16により撮影された画像はノイズを含むため、二値化画像もノイズを含んでいる。このため、渦巻きばね30に対応しない部分の画素にも濃度値「1」となるものが存在する。なお、このステップS12から後述するS30までの処理は、コンピュータ22によって実行される。
【0019】
次に、図2のステップS14では、ステップS12で得られた二値化画像を用いて、渦巻きばね30の重心(cx,cy)を算出する。具体的には、濃度値が「1」となる画素群(すなわち、渦巻きばね30に対応する部分の画素群)の座標値(x、y)から、その重心(cx,cy)を計算する。図4に示す例では、渦巻きばね30の略中央に重心(cx,cy)が位置している。
【0020】
次に、図2のステップS16では、ステップS12で得られた二値化画像から輪郭線を抽出する。二値化画像から輪郭線を抽出する処理は、公知の方法(例えば、長谷川純一,輿水大和,中山晶,横井茂樹著,「画像処理の基本技法<技術入門編>」,技術評論社,p.70−73)を用いることができる。図5に、渦巻きばね30の二値化画像から抽出された輪郭線の例が示されている。
【0021】
なお、本実施例では、ステップS16で抽出される輪郭線は、画素番号i(i=0〜n)と、その画素番号iに対応する画素の座標値(xi,yi)で表される。画素番号iは、輪郭線上の画素に付与された番号であり、以下の規則に従って付与される。すなわち、輪郭線上に設定された1つの画素を原点として、その画素に画素番号i=0を付与する。原点は、輪郭線上の任意の点に設定することができる。次いで、その原点と隣接する画素に画素番号1を付与する。ここで、原点となる画素には、輪郭線上を時計回りに移動する方向に隣接する画素と、反時計回りに移動する方向に隣接する画素の2通りがある。本実施例では、原点と隣接する画素のうち、反時計回りに移動する方向に隣接する画素に画素番号1を付与する。次いで、画素番号1の画素に隣接する画素に画素番号2を付与し、以下、同様の手順で画素番号を付与する。これによって、輪郭線を構成する全ての画素に画素番号が付与される。上述した説明から明らかなように、画素番号iの画素から画素番号nの画素まで順に移動すると、輪郭線上を一方向に一巡することとなる。なお、本明細書では、画素番号0からnまでの座標値列(x0,y0),(x2,y2)・・(xn,yn)を輪郭線系列(xi,yi)(i=0〜n)という。
【0022】
次に、図2のステップS17では、ステップS16で得られた輪郭線系列(xi,yi)(i=0〜n)を極座標による輪郭線系列(ri,θi)(i=0〜n)に変換する。すなわち、図5に示すように、xy座標系による輪郭線系列(xi,yi)を、ステップS14で算出された重心(cx,cy)を原点として、動径riと偏角θiにより表す。図5に示すように、動径riは、原点(cx,cy)と輪郭線系列(xi,yi)の距離である。偏角θiは、原点(cx,cy)と輪郭線系列(xi,yi)とを結んだ直線と、x軸とのなす角である。したがって、ステップS32によって、xy座標系の輪郭線系列(cx,cy)(i=0〜n)は、極座標系の輪郭線系列(ri,θi)(i=0〜n)に変換される。ここで、極座標系の輪郭線系列(ri,θi)から得られる角座標値列θi(i=0〜n)をグラフ化すると、図6aに示すグラフとなる。図6aに示すグラフでは、縦軸が偏角θiであり、横軸が画素番号(輪郭線要素番号)iとなっている。図6aから明らかなように、角座標値列θiは−180°〜+180°の範囲の数値を有し、−180°と+180°において不連続となっている。
【0023】
次に、図2のステップS18,20では、ステップS17で極座標変換された輪郭線系列(ri,θi)(i=0〜n)から、フック領域を特定すると共に、フック先端点を算出する処理を行う。これらの処理について、図3に示すフローチャ−トに沿って説明する。
【0024】
先ず、図3のステップS34,S36では、図2のステップS17で作成した極座標系の輪郭線系列(ri,θi)(i=0〜n)から、内フック領域と外フック領域を抽出する。本実施例では、輪郭線系列(ri,θi)(i=0〜n)のうち、角座標値列θi(i=0〜n)の特性を利用して、内フック領域Aと外フック領域Bを特定する。
【0025】
なお、図6aに示すグラフでは、角座標値列θi(i=0〜n)が−180°〜+180°の範囲とされ、角座標値列θiには不連続点が存在する。ステップS34以降の処理は、図6aに示すグラフの不連続点をつなぎ合わせた角座標値列(図6b)を用いて行ってもよいし、不連続点を残した角座標値列(図6a)を用いて行ってもよい。
【0026】
上述したことから明らかなように、輪郭線系列(ri,θi)(i=0〜n)は、輪郭線上を原点から反時計回りに移動を開始し、輪郭線を一巡することで画素番号が付与されている。このため、渦巻きばねを内側から見て右巻きにセットした場合では、原点から内フック端点(又は外フック端点)までは反時計回りに移動しながら画素番号が付与され、内フック端点(又は外フック端点)から外フック端点(又は内フック端点)までは時計回りに移動しながら画素番号が付与され、外フック端点(又は内フック端点)から原点までは反時計回りに移動しながら画素番号が付与される。したがって、不連続点を接続したグラフ(図6b)では、原点から内フック端点(又は外フック端点)までは角座標値列θi(i=0〜n)は単調減少(又は単調増加)し、内フック端点(又は外フック端点)から外フック端点(又は内フック端点)までは角座標値列θi(i=0〜n)は単調増加(又は単調減少)し、外フック端点(又は内フック端点)から原点までは角座標値列θi(i=0〜n)は単調減少(又は単調増加)する。したがって、図6bに示すように、角座標値列θi(i=0〜n)の関数は、内フック端点の近傍で極小値をとり、外フック端点の近傍で極大値をとる。
【0027】
そこで、ステップS34では、角座標値列θi(i=0〜n)が極小値となる部分を含む領域Aを内フック領域として特定する。例えば、図6aに示すように、内フック領域Aとして、極小値に隣接して角座標値θa1が180°となる画素番号a1から角座標値θa2が180°となる画素番号a2までの領域を特定し、この領域(a1〜a2)内に極小値が含まれるようにする。図7には、特定された内フック領域Aの輪郭線系列が示されている。図7より明らかなように、特定された内フック領域Aに内フック端点が含まれている。
【0028】
また、ステップS36では、角座標値列θi(i=0〜n)が極大値となる部分を含む領域Bを外フック領域として特定する。例えば、図6aに示すように、外フック領域Bとして、極大値に隣接して角座標値θb1が−180°となる画素番号b1から角座標値θb2が−180°となる画素番号b2までの領域を特定し、この領域(b1〜b2)内に極大値が含まれるようにする。図8には、特定された外フック領域Bの輪郭線系列が示されている。図8より明らかなように、特定された外フック領域Bに外フック端点が含まれている。
【0029】
なお、図7と図8の比較から明らかなように、外フック領域Bは、内フック領域Aに比較して広い領域となっている。すなわち、特定した外フック領域B(rk,θk)(k=b1〜b2)が広い場合には、図9に示すように、外フック領域Bのトリミングを行うことが好ましい。図9に示す例では、極大値imaxから角度α(例えば、40°)の角度範囲を新しい外フック領域B’(rk,θk)(k=b1’〜b2’)として新たに切り出している。図10は、トリミング後の外フック領域B’を示している。図10より明らかなように、トリミング後の外フック領域B’は、トリミング前の外フック領域Bと比較して適切な大きさに修正されている。これによって、次のステップS40で行われるフック先端点の算出処理の計算量を少なくすることができる。なお、上述の例では、外フック領域Bが広いため、外フック領域Bをトリミングしたが、内フック領域Aが外フック領域Bより広い場合には、内フック領域Aをトリミングしてもよい。さらには、内フック領域Aと外フック領域Bの両者をトリミングするようにしてもよい。
【0030】
また、図6bに示すグラフでは、内フック領域Aで極小値をとり、外フック領域Bで極大値をとったが、渦巻きばねの巻き方向が逆となれば、当然、内フック領域で極大値をとり、外フック領域で極小値をとることとなる。
【0031】
次に、ステップS38では、ステップS34で特定した内フック領域A(xk,yk)(k=a1〜a2)から2つの内フック端点を特定し、その2つの内フック端点から内フック先端点の座標値(xac,yac)を算出する。また、ステップS40では、ステップS36で特定した外フック領域B’(xk,yk)(k=b1’〜b2’)から2つの外フック端点を特定し、その2つの外フック端点から外フック先端点の座標値(xbc,ybc)を算出する。なお、ステップS38とステップS40の処理は、対象とする領域が内フック領域Aか外フック領域Bかで相違するものの、その処理手順は同一である。このため、ここではステップS40の処理、すなわち、外フック端点を特定し、その特定した外フック端点から外フック先端点の座標値(xbc,ybc)を求める処理の一例について説明する。
【0032】
図11に示すように、外フック領域B’(xk,yk)(k=b1’〜b2’)内には外フック端点が2つ存在し、これら2つの外フック端点では輪郭線が略直交している。すなわち、渦巻きばね30は、ばね素線(板材)を渦巻状に成形することで製造されるため、外フック領域Bには2つの外フック端点が存在し、それら2つの外フック端点では輪郭線が略直交する。したがって、まず、ステップS36で特定した輪郭線系列B’(xk,yk)(k=b1’〜b2’)内から、輪郭線が略直交する点を抽出する。この処理は、例えば、外フック領域B’を構成する各輪郭線系列B’(xk,yk)(k=b1’〜b2’)のそれぞれに対して、図11に示すようにベクトルp(k)とm(k)を設定し、これらのベクトルp(k)とm(k)が直交するか否かで抽出することができる。p(k)、m(k)は、例えば、次の式(1)で表すことができる。
【0033】
【数1】
【0034】
上記の式(1)から明らかなように、m(k)は、輪郭線上の点(xk,yk)からN画素だけ前の輪郭線上の各点までの輪郭線系列(xk−N、yk−N),(xk−(N―1),yk−(N―1)),・・,(xk,yk)が向いている方向を平均したものである。また、p(k)は、輪郭線上の点(xk,yk)からN画素だけ後ろの輪郭線上の各点までの輪郭線列(xk,yk),(xk+1,yk+1),・・,(xk+N,yk+N)が向いている方向を平均したものである。なお、本実施例では、ベクトルm(k)、p(k)を算出するために0〜N画素の範囲を用いた。ここで、設定値Nは、ステップS10で撮影された画像内における、渦巻きばね30の素線の板厚に応じて設定することが好ましい。例えば、撮影された画像内において、渦巻きばね30の素線の板厚が約X画素となる場合は、設定値NをX/2とすることができる。このように、撮影された画像内において、渦巻きばね30の板厚が何画素分の長さに相当するかで、m(k)及びp(k)を算出する画素数を設定することが好ましい。
【0035】
上述したように、ベクトルm(k)とベクトルp(k)を算出すると、次に、ベクトルp(k)とベクトルm(k)が直交するか否かを判定する。ベクトルp(k)とベクトルm(k)が直交するか否かを判定するには、例えば、ベクトルp(k)とベクトルm(k)から算出されるcosθkを用いることができる(下記の式(2)参照)。ここで、θkは、ベクトルp(k)とベクトルm(k)のなす角度である。
【0036】
【数2】
【0037】
フックの端点では、ベクトルm(k)とベクトルp(k)は略直交する。ベクトルm(k)とベクトルp(k)が略直交すると、θk≒90°となり、cosθk≒0となる。したがって、cosθk≒0となる2つのkを探索することで、輪郭線系列からフック端点に相当する点(2点)を特定することができる。
【0038】
なお、本実施例では、輪郭線から2つのベクトルm(k)とp(k)を算出し、cosθを用いてフック端点を算出したが、cosθの代わりに、sinθ又はtanθを用いてフック端点を特定してもよい。また、ベクトルm(k)とp(k)を用いる代わりに、渦巻きばねの外形を表す直線式(近似した直線式)を算出し、直線の直交条件(2つの直線の傾きの積が−1となること)を用いてフック端点を特定してもよい。また、テンプレートマッチング等を用いてフック端点を特定してもよい。
【0039】
上記のように特定した外フック端点をPa(xpa,ypa)、内フック端点をPb(xpb,ypb)と記すこととする。外フック端点Paと内フック端点Pbを特定すると、この2つの外フック端点Pa(xpa,ypa),Pb(xpb,ypb)の中点を算出し、この算出した中点を外フック先端点の座標値(xbc,ybc)とする。なお、既に説明したように、内フック先端点の座標値(xac,yac)は、上述した外フック先端点の座標値(xbc,ybc)を求める手順と同様の手順で求めることができる。
【0040】
上記のようにして内フック先端点及び外フック先端点の座標値を算出すると、次に、図2のステップS22に進み、ステップS10で撮影された撮影画像内の渦巻きばね30を細線化することで細線化画像を作成する。撮影された画像内の渦巻きばね30を細線化する方法としては、従来公知の方法(例えば、上述した「画像処理の基本技法<技術入門編>」(長谷川純一,輿水大和,中山晶,横井茂樹著/技術評論社)に開示の方法等)を用いることができる。図12は、ステップS22によって作成される細線化画像の一例を示している。ステップS10で撮影された撮影画像内に多くのノイズが含まれている場合は、図12に示すように、ステップS22で得られる細線化画像にも多くのノイズ(いわゆる、「ループ」)が含まれている。
【0041】
次に、図2のステップS24では、まず、ステップS12で得られた二値化画像を収縮して収縮画像(図13)を作成する。次いで、作成した収縮画像(図13)とステップS22で得られた細線化画像(図12)とのAND条件(すなわち、両画像において渦巻きばねとされている点)をとり、新しい細線化画像(図14、図15)を作成する。図14、17より明らかなように、新しい細線化画像では「ループ」状のノイズが切断され、「ひげ」状のノイズのみが残っている。なお、二値化画像から収縮画像を得る方法としては、従来公知の方法(例えば、上述した「画像処理の基本技法<技術入門編>」(長谷川純一,輿水大和,中山晶,横井茂樹著/技術評論社)に開示の方法等)を用いることができる。
【0042】
次に、図2のステップS26では、ステップS24で作成された細線化画像に含まれる「ひげ」状のノイズを削除する。図15に示すように、ステップS24で作成された細線化画像には、内フック先端点と外フック先端点の近傍以外にも、多くの「ひげ」状のノイズが含まれている。そこで、内フック先端点の最近傍の「ひげ」状のノイズと外フック先端点の最近傍の「ひげ」状のノイズは、後述する処理で削除することとし、まずは、それ以外の「ひげ」状のノイズを削除する(図16参照)。これによって、内フック先端点近傍及び/又は外フック先端点近傍に1個の「ひげ」状のノイズのみが残ることとなる。
【0043】
ステップS24で作成された細線化画像の外フック及び内フック先端点の近傍はY字状に分岐した形状を有する(図15参照)。この細線化画像にステップS26の処理を行うことで、内フック先端点近傍及び外フック先端点近傍のY字状分岐の一方が削除される。例えば、図16に示すように、Y字状に分岐した外フック先端点のうち、ステップS40で算出した外フック先端点の座標値(xbc,ybc)に近い方が残され、遠い方が削除される。図16に示す例では、図中、上側の分岐が残され、下側の分岐が削除される。なお、内フック先端点についても、上記と同様に処理することができる。ステップS26の処理を行うことで、図17に示す細線化画像が得られる。
【0044】
上記のようにして、細線化画像から全ての「ひげ」状のノイズが削除されると、図2のステップS28に進み、細線化画像の内フック先端点から予め設定されたn個の画素を削除し、削除後に先端となる点とステップS38で算出した内フック先端点(xac,yac)とを接続する。また、細線化画像の外フック先端点から予め設定されたn個の画素を削除し、削除後の先端となる点とステップS40で算出した外フック先端点(xbc,ybc)とを接続する。これによって、ステップS28の処理が終了する。ステップS28の処理により、ひげ状のノイズが全て削除された細線化画像(図18)が得られる。
【0045】
次に、図2のステップS30では、ステップS28で得られた細線化画像を平滑化して、最終的な細線化画像(芯線画像(図18参照))を作成する。細線化画像を平滑化する方法としては、従来公知の方法(例えば、スプライン補間、最小二乗法、デジタルフィルタによる平滑化法等)を用いることができる。
【0046】
上述したように、本実施例の画像処理装置10では、撮影された画像から渦巻きばね30の輪郭線系列(xi,yi)(i=0〜n)を抽出し、その抽出した輪郭線系列を極座標変換して輪郭線系列(ri,θi)(i=0〜n)とする。そして、角座標値列θi(i=0〜n)の特性から、内フック領域A及び外フック領域Bを特定する。このため、正確に内フック領域A及び外フック領域Bを特定することができる。また、内フック領域A及び外フック領域Bを正確に特定することができるため、内フック端点及び外フック端点も正確に特定することができる。
【0047】
また、内フック領域A及び外フック領域Bを特定する処理、及び、内フック端点及び外フック端点を特定する処理は、撮影された画像から抽出された渦巻きばね30の輪郭線系列(xi,yi)(i=0〜n)を利用して行われる。このため、画像処理するデータ量を少なくすることができ、短時間で処理を完了することができる。
【0048】
さらに、正確に算出された内フック先端点及び外フック先端点等を用いて、細線化画像からノイズ成分である「ループ」及び「ひげ」を削除する。このため、細線化画像から適切にノイズ成分が削除され、正確な細線化画像(芯線化画像)を得ることができる。
【0049】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
【0050】
例えば、上述した実施例では、極座標変換するときの原点として、渦巻きばね30の重心(cx,cy)を用いたが、本発明は、このような実施形態に限られない。例えば、極座標変換するときの原点は、渦巻きばね30の内側ではなく、渦巻きばね30の外側に設定してもよい。また、本願の技術は、図4に示すフック形状を有する渦巻きばねを芯線化できるだけではなく、種々のフック形状を有する渦巻きばねを芯線化することができる。例えば、図19、20に示すような、切り放しタイプの外フック形状を有する渦巻きばねを芯線化することもできる。
【0051】
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組合せによって技術的有用性を発揮するものであり、出願時の請求項記載の組合せに限定されるものではない。また、本明細書または図面に例示した技術は、複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【0052】
10:画像処理装置
12:ステージ
14:照明器
16:CCDカメラ
18:通信線
20:ディスプレイ
22:コンピュータ
30:渦巻きばね
32:渦巻きばねの内フック
34:渦巻きばねの外フック
【特許請求の範囲】
【請求項1】
内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するための画像処理装置であり、
渦巻きばねを撮影した撮影画像を入力する画像入力手段と、
入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出手段と、
抽出された輪郭線を極座標変換する座標変換手段と、
極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得手段と、
取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定手段と、
を有する画像処理装置。
【請求項2】
前記フック領域特定手段は、前記「輪郭線の角座標値列」が極大値又は極小値となる「画素」を含む所定の領域を、内フック領域又は外フック領域として特定する、請求項1に記載の画像処理装置。
【請求項3】
特定された内フック領域内の輪郭線から2つの内フック端点を特定し、それら内フック端点の位置から内フック先端点の位置を算出する内フック先端点算出手段と、
特定された外フック領域内の輪郭線から2つの外フック端点を特定し、それら外フック端点の位置から外フック先端点の位置を算出する外フック先端点算出手段と、
入力された撮影画像内の渦巻きばねを細線化する細線化手段と、
細線化手段で細線化された渦巻きばねの端部を、内フック先端点算出手段で算出した内フック先端点と外フック先端点算出手段で算出した外フック先端点とを用いて修正する細線化画像修正手段と、をさらに有する、請求項1又は2に記載の画像処理装置。
【請求項4】
内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するための画像処理方法であり、コンピュータに下記の処理、即ち、
渦巻きばねを撮影した撮影画像を入力する画像入力処理と、
入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、
抽出された輪郭線を極座標変換する座標変換処理と、
極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、
取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理と、
を実行させる画像処理方法。
【請求項5】
内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するためのプログラムであり、コンピュータに下記の処理、即ち、
渦巻きばねを撮影した撮影画像を入力する画像入力処理と、
入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、
抽出された輪郭線を極座標変換する座標変換処理と、
極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、
取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理と、
を実行させるプログラム。
【請求項1】
内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するための画像処理装置であり、
渦巻きばねを撮影した撮影画像を入力する画像入力手段と、
入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出手段と、
抽出された輪郭線を極座標変換する座標変換手段と、
極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得手段と、
取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定手段と、
を有する画像処理装置。
【請求項2】
前記フック領域特定手段は、前記「輪郭線の角座標値列」が極大値又は極小値となる「画素」を含む所定の領域を、内フック領域又は外フック領域として特定する、請求項1に記載の画像処理装置。
【請求項3】
特定された内フック領域内の輪郭線から2つの内フック端点を特定し、それら内フック端点の位置から内フック先端点の位置を算出する内フック先端点算出手段と、
特定された外フック領域内の輪郭線から2つの外フック端点を特定し、それら外フック端点の位置から外フック先端点の位置を算出する外フック先端点算出手段と、
入力された撮影画像内の渦巻きばねを細線化する細線化手段と、
細線化手段で細線化された渦巻きばねの端部を、内フック先端点算出手段で算出した内フック先端点と外フック先端点算出手段で算出した外フック先端点とを用いて修正する細線化画像修正手段と、をさらに有する、請求項1又は2に記載の画像処理装置。
【請求項4】
内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するための画像処理方法であり、コンピュータに下記の処理、即ち、
渦巻きばねを撮影した撮影画像を入力する画像入力処理と、
入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、
抽出された輪郭線を極座標変換する座標変換処理と、
極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、
取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理と、
を実行させる画像処理方法。
【請求項5】
内フックから外フックまで渦巻状に成形された渦巻きばねの形状を芯線化するためのプログラムであり、コンピュータに下記の処理、即ち、
渦巻きばねを撮影した撮影画像を入力する画像入力処理と、
入力された撮影画像から渦巻きばねの輪郭線を抽出する輪郭線抽出処理と、
抽出された輪郭線を極座標変換する座標変換処理と、
極座標変換された輪郭線に対して、その輪郭線上を一方向に移動しながら一巡したときの「輪郭線の角座標値列(θ1,θ2,・・,θn)」を取得する角座標値列取得処理と、
取得された「輪郭線の角座標値列」を用いて、内フック領域及び外フック領域を特定するフック領域特定処理と、
を実行させるプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6a】
【図6b】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6a】
【図6b】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2013−19845(P2013−19845A)
【公開日】平成25年1月31日(2013.1.31)
【国際特許分類】
【出願番号】特願2011−155008(P2011−155008)
【出願日】平成23年7月13日(2011.7.13)
【出願人】(000210986)中央発條株式会社 (173)
【Fターム(参考)】
【公開日】平成25年1月31日(2013.1.31)
【国際特許分類】
【出願日】平成23年7月13日(2011.7.13)
【出願人】(000210986)中央発條株式会社 (173)
【Fターム(参考)】
[ Back to top ]