(57)【特許請求の範囲】
【請求項１】
対象物上の凹凸を画像データに基づき検出する凹凸検出装置において、
対象物上の凹凸の配置に対応する座標位置が予め設定された座標設定手段と、凹凸を検出するために、両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分の行列サイズを設定する行列サイズ設定手段と、
各画素が対象物上の凹凸の高さデータを含む画像データの入力に基づき、前記画像データのうち各凹凸の座標位置に対し前記設定された行列サイズで順次走査する走査手段と、
前記各凹凸の座標位置を走査した都度、前記設定された行列サイズに基づき、前記両端の画素の各高さデータに基づき凹凸の絶対高さを演算する微分演算手段と、
を備えたことを特徴とする凹凸検出装置。
【請求項２】
前記微分演算手段による演算後の凹凸の絶対高さを所定の判断基準に基づき凹凸の状態を判断する凹凸検出手段を備えた請求項１記載の凹凸検出装置。
【請求項３】
前記座標設定手段には、対象物上の各凹凸の外径縁部のうち１ラインの主走査方向上の１点が優先微分座標として設定され、
前記行列サイズ設定手段は、前記１ラインの主走査方向に沿って両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分（１＊Ｎ行列）の行列サイズＮが設定された請求項１記載の凹凸検出装置。
【請求項４】
前記走査手段は、対象物上で凹凸が配置されていない領域においては、前記設定された行列サイズの画素が互いに重ならないよう走査して前記微分演算手段による対象物表面上での絶対高さ演算を実行させる請求項１又は３のいずれかに記載の凹凸検出装置。
【請求項５】
前記座標設定手段には、対象物上の凹凸の配置に対応して凹凸が設けられた領域と、凹凸が設けられていない領域が予め設定されており、
前記走査手段は、前記凹凸が設けられた領域においては、前記凹凸を順次走査して前記微分演算手段に凹凸の絶対高さの演算を実行させ、
前記凹凸が設けられていない領域においては、前記設定された行列サイズの画素が互いに重ならないよう走査して前記微分演算手段による対象物表面上での絶対高さ演算を実行させる請求項１記載の凹凸検出装置。
【請求項６】
各画素が対象物上の凹凸の高さデータを含む画像データに基づき対象物上の凹凸を検出する凹凸検出方法において、
両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分の行列サイズで対象物上の凹凸の配置に対応する座標位置を順次走査し、
前記各凹凸の座標位置を走査した都度、前記設定された行列サイズが示す前記両端の画素の各高さデータに基づき凹凸の絶対高さを演算し凹凸を検出することを特徴とする凹凸検出方法。
【請求項７】
前記各凹凸の座標位置は、該凹凸の外径情報の入力に基づき、１ラインの主走査方向上にある１点の外接縁部である請求項６記載の凹凸検出方法。
【請求項８】
前記行列サイズは、前記１ラインの主走査方向に沿って両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分（１＊Ｎ行列）の行列サイズＮである請求項７記載の凹凸検出方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、対象物の画像データに基づき対象物表面上の凹凸を検出する装置に係り、特に、広範囲に渡る対象物上での凹凸を高速に検出することができる凹凸検出装置及び方法に関する。
【０００２】
【従来の技術】
対象物の画像データを画像処理して対象物上の凹凸を検出する装置がある。例えば、プリント基板製造ラインにおいて半田形成後においてプリント基板上の半田突起の位置が正しい位置にあるか検査する検査装置の一機能として用いられる。
【０００３】
図９は、Ｓｏｂｅｌ微分を用いた突起の検出方法を示す概要図である。
画像データの各画素には、対象物上の突起の高さ（距離）データを有している。対象物の高さデータは、例えば、変位測定装置を用いて得ることができる。
【０００４】
このような各画素が高さデータを有する場合、この高さデータを微分して突起の有無等の特徴を検出できる。
例えば、Ｓｏｂｅｌ微分で微分する方法がある。Ｓｏｂｅｌ微分は、微分対象点ａを中心に所定範囲（例えば図示の例では３×３画素）の周辺画素の高さデータに基づき、結果を得るようになっている。突起の場合、この突起の外縁を浮き出させることができる。
【０００５】
【発明が解決しようとする課題】
しかしながら、Ｓｏｂｅｌ微分では、１画素の微分対象点ａに関する微分値を得るために周辺画素Ａ〜Ｈの微分値を取込む必要があるため、微分対象点を１画素走査させる都度、同様の処理を繰り返さねばならず、演算処理に負担がかかり高速化できなかった。
【０００６】
また、対象物上で、突起が所定の位置に分散して配置されている場合があるが、このような場合に対象物上を１画素づつ移動走査させＳｏｂｅｌ微分させる方法では、対象物全体の突起検出に多大な時間がかかることになる。
また、突起が存在しない箇所であっても上記複雑な演算を実行しなければならないという不都合があった。
【０００７】
本発明は、上記課題を解決するためになされたものであり、対象物上に設けられた複数の凹凸を簡単かつ高速に検出することができる凹凸検出装置及び方法の提供を目的としている。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、本発明の凹凸検出装置は、対象物上の凹凸を画像データに基づき検出する凹凸検出装置において、
対象物上の凹凸の配置に対応する座標位置が予め設定された座標設定手段と、凹凸を検出するために、両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分の行列サイズを設定する行列サイズ設定手段と、
各画素が対象物上の凹凸の高さデータを含む画像データの入力に基づき、前記画像データのうち各凹凸の座標位置に対し前記設定された行列サイズで順次走査する走査手段と、
前記各凹凸の座標位置を走査した都度、前記設定された行列サイズに基づき、前記両端の画素の各高さデータに基づき凹凸の絶対高さを演算する微分演算手段と、
を備えたことを特徴とする。
【０００９】
また、前記微分演算手段による演算後の凹凸の絶対高さを所定の判断基準に基づき凹凸の状態を判断する凹凸検出手段を備えてもよい。
【００１０】
また、前記座標設定手段には、対象物上の各凹凸の外径縁部のうち１ラインの主走査方向上の１点が優先微分座標として設定され、
前記行列サイズ設定手段は、前記１ラインの主走査方向に沿って両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分（１＊Ｎ行列）の行列サイズＮが設定された構成にできる。
【００１１】
また、前記走査手段は、対象物上で凹凸が配置されていない領域においては、前記設定された行列サイズの画素が互いに重ならないよう走査して前記微分演算手段による対象物表面上での絶対高さ演算を実行させる構成としてもよい。
【００１２】
また、前記座標設定手段には、対象物上の凹凸の配置に対応して凹凸が設けられた領域と、凹凸が設けられていない領域が予め設定されており、
前記走査手段は、前記凹凸が設けられた領域においては、前記凹凸を順次走査して前記微分演算手段に凹凸の絶対高さの演算を実行させ、
前記凹凸が設けられていない領域においては、前記設定された行列サイズの画素が互いに重ならないよう走査して前記微分演算手段による対象物表面上での絶対高さ演算を実行させる構成にできる。
【００１３】
本発明の凹凸検出方法は、各画素が対象物上の凹凸の高さデータを含む画像データに基づき対象物上の凹凸を検出する凹凸検出方法において、
両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分の行列サイズで対象物上の凹凸の配置に対応する座標位置を順次走査し、
前記各凹凸の座標位置を走査した都度、前記設定された行列サイズが示す前記両端の画素の各高さデータに基づき凹凸の絶対高さを演算し凹凸を検出することを特徴とする。
【００１４】
また、前記各凹凸の座標位置は、該凹凸の外径情報の入力に基づき、１ラインの主走査方向上にある１点の外接縁部としてもよい。
【００１５】
また、前記行列サイズは、前記１ラインの主走査方向に沿って両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分（１＊Ｎ行列）の行列サイズＮとしてもよい。
【００１６】
上記構成によれば、画像データを走査する際、凹凸部分を順次走査して、対象物の面と凹凸の表面の２つの画素の高さデータに基づき絶対高さを求める構成であるから、簡単な処理で高速に凹凸を検出することができる。
【００１７】
【発明の実施の形態】
〔第１実施形態〕
図１は、本発明の凹凸検出装置の実施形態を示すブロック図である。
画像入力手段１は、対象物の画像データを取り込む。この画像入力手段１としては、例えば変位測定装置が用いられる。この変位測定装置は、非接触でレーザ光を対象物に照射して受光素子上での反射光の結像位置に基づき対象物表面上における突起部の高さデータを求める。この画像入力手段１から出力される画像データは、各画素にそれぞれ高さデータを有している。
【００１８】
設定手段２には、対象物上での突起の存在位置がＸ，Ｙ座標として予め設定されている。図２（ａ）の平面図に示す如く、対象物Ｗ上での各突起Ｔは配置設計時に識別用のラベリング番号と、配置された設計上の座標位置を有して配列されている。
【００１９】
座標設定手段２ａには、各突起Ｔのラベリング番号と、突起Ｔの座標位置が設定される。図２（ｂ）の拡大図に示すように、座標位置は、突起Ｔ１についてはＸ軸上での左右の縁部それぞれの中点の座標が優先微分座標Ｔａ（Ｔａ１，Ｔａ２）として設定されている。
この座標設定手段２ａは、対象物Ｗ上での突起Ｔの配置設計時のデータベースに含まれる突起Ｔの外径情報（外接長方形）に基づき、この突起Ｔの左右の外縁位置から優先微分座標Ｔａを演算して求め設定することもできる。この演算は処理手段３が実行し座標設定手段２ａに設定すればよい。
【００２０】
また、行列サイズ設定手段２ｂには、後述する微分処理時における微分対象の範囲が設定される。即ち、Ｘ，Ｙ座標上での画素配列（１＊Ｎ行列）のＮの値が設定される。このＮは、１ラインのＸ軸（主走査方向）上に所定画素数分だけ並んだ値である。
図３の平面図に示す如く、対象物Ｗ上でＸ方向に隣接する突起Ｔ，Ｔ同士間の間隔がＬのとき、Ｎの画素数は、Ｌ＞Ｎとして設定される。このＮの画素数は隣接する１対の突起Ｔ，Ｔ間を跨がないサイズに設定する。
例えば、Ｌが３０画素であるとき、Ｎは２０画素（１画素＝２０μｍ）とされる。突起ＴはＸ，Ｙ軸方向にそれぞれ１００画素程度の大きさである。
【００２１】
処理手段３は、ＣＰＵ，ＲＯＭ，ＲＡＭ等のコンピュータ装置で構成される。ＣＰＵは、凹凸検出プログラムの実行により画像入力手段１から出力される画像データを画像処理して対象物Ｗ上の突起を検出する。
この画像処理とは、画像データに対して上記の各優先微分座標上で微分対象範囲（１＊Ｎ行列）の画素に対する微分を施す。この微分処理により、画像処理した領域の対象物Ｗ上での突起Ｔの突出状態を判断できるようになる。
【００２２】
走査手段３ａは、画像データ上で各突起Ｔの存在箇所の画像データを順次走査する。この走査は、座標設定手段２ａで設定された各優先微分座標（各突起Ｔの両側部の中点の座標（Ｔａ１，Ｔａ２）に対して上記微分対象範囲が位置するよう走査する。この走査はＸ軸上で１ライン主走査した後、Ｙ軸を１ライン副走査させた後、またＸ軸方向に１ライン主走査させることを繰り返す。
【００２３】
具体的には、図４（ａ）の平面図に示すように、ある突起Ｔの中点の座標Ｔａ１上で微分対象範囲（１＊Ｎ行列）の中央部を位置させる。
この後、この突起Ｔの他の中点の座標Ｔａ２上で微分対象範囲（１＊Ｎ行列）の中央部を位置させる。
図４（ｂ）は、同図（ａ）の側面図であり、この走査により微分対象範囲（１＊Ｎ行列）の一端の画素は対象物Ｗの面上に位置し、他端の画素は突起Ｔの上端部に位置している。
【００２４】
微分演算手段３ｂは、各優先微分座標Ｔａ（Ｔａ１，Ｔａ２，…）上に微分対象範囲（１＊Ｎ行列）が走査配置される都度、この優先微分座標Ｔａ上での画像データ内で高さデータを微分演算する。
【００２５】
この微分は、微分対象範囲（１＊Ｎ行列）が位置した両端の２つの画素の高さデータを取り込む。
そして、この２つの高さデータそれぞれの値の差分の絶対値を演算して微分値を得る。即ち、図４（ｂ）に示すように、優先微分座標Ｔａ１部分に微分対象範囲が走査で位置した際には、微分対象範囲（１＊Ｎ行列）のＸ軸上の両端の画素をａ，ｂとすると、これら画素ａ，ｂの各高さデータを読み出して、微分値Ｘ＝｜ａ−ｂ｜を演算する。
【００２６】
凹凸検出手段３ｃは、微分演算手段３ｂでの微分演算結果に基づき、各突起Ｔの存在の有無等を検出して、結果を出力手段５に出力する。所定の微分値が得られなかった突起Ｔについては、異常報知する。
【００２７】
記憶手段４には、処理手段３での画像処理後の測定データ（微分後のデータ）が格納される。この測定データは、予め設定されていた突起Ｔのラベリング番号別に微分値が対応付けされてなる。
出力手段５は、表示装置や外部Ｉ／Ｆで構成され、測定データを画面表示、及び外部出力する。
【００２８】
次に、上記構成における装置の動作を図５のフローチャートを用いて説明する。
処理手段３は、まず処理の初期値を読み込む（Ｓ１）。即ち、走査手段３ａが走査する際の各突起Ｔ００１〜Ｔｎｎｎの優先微分座標、及び行列サイズ設定手段３ｂに設定された微分時における微分対象範囲（１＊Ｎ行列）の値を読み込む。
【００２９】
次に、画像入力手段１は取り込んだ対象物Ｗの画像を記憶手段４に格納する（Ｓ２）。この画像は、各画素がそれぞれ高さデータを有している。
そして、走査手段３ａは、取り込んだ画像中の各突起Ｔを優先微分座標ＴａをＴａ１〜Ｔａｎまで順次走査する（Ｓ３）。
【００３０】
始めに突起Ｔ００１における優先微分座標Ｔａ１部分では、図４に示す如く、微分対象範囲（１＊Ｎ行列）にＮ行列の中央を位置させる（Ｓ４）。ここで、行列サイズ設定手段２ｂは、Ｎの値として所定の画素数（例えば２０画素）が設定されている。このため、図示の状態で微分対象範囲の一端の画素ａは対象物Ｗの表面上に位置し、他端の画素ｂは突起Ｔ００１の頂部に位置している。
【００３１】
この状態で画素ａ，ｂの高さデータを読み出し、微分値Ｘ＝｜ａ−ｂ｜を演算する（Ｓ５）。この微分値は突起Ｔ００１の微分値として対応づけて記憶手段４に格納する（Ｓ６）。
これにより、対象物Ｗの表面と、突起Ｔ００１の頂部の差の絶対値を演算するだけで突起Ｔ００１の高さの微分値を正確に得ることができる。
【００３２】
次に、走査手段３ａは、この突起Ｔ００１の他端の優先微分座標Ｔａ２部分でも同様に微分演算を行なう。この後、突起Ｔ００２を走査して上記同様の処理を繰返し、最終的に突起Ｔｎｎｎまでを繰り返す（Ｓ７）。
【００３３】
記憶手段４には、各突起Ｔの微分値が格納されるが、凹凸検出手段３ｃは、予め座標設定手段２ａで設定された各突起Ｔの位置上での実際の存在を検出する（Ｓ８）。各突起Ｔでそれぞれ所定の微分値（ある値以上大きな微分値）が得られた場合には、この突起Ｔの存在を検出し、対象物Ｗ上での突起Ｔの有無を確認する（Ｓ８）。
一方、ある突起Ｔについて所定の微分値が得られなかった場合には、対象物Ｗ上で存在する箇所で突起Ｔが存在しない（あるいは高さが低い）と判断し、出力手段５に該当する突起Ｔのラベリング番号と異常の報知を出力する。
【００３４】
上記処理により、対象物Ｗ上で各突起Ｔの部分だけを微分対象範囲（１＊Ｎ行列）で微分するため、対象物Ｗの面積が広くても（画像データのデータ量が多くても）高速に凹凸検出することができるようになる。
【００３５】
上記説明では、１つの突起Ｔに対して２つの優先微分座標Ｔａ１，Ｔａ２が設定され、２つの微分値を検出するため、突起Ｔの形成状態が正常であるか否かも検出できる。即ち、双方の微分値はほぼ同様な値であれば突起Ｔが正常に突出していると判断でき、片方の微分値のみ値が異なれば突起Ｔの一側部が欠損あるいは不要に突出していると判断できる。これらはいずれも突起Ｔの形状が異常であると判断する基にできる。
一方、１つの突起Ｔに対して１つの優先微分座標Ｔａ１のみ設定して微分値を検出する構成にもでき、この場合、突起検出にかかる時間を半減させることができ、より検出の高速化が図れるようになる。
このような構成によれば、演算処理のステップ数を従来に比して少なくでき、従来２分の演算が必要だったのに比して１８秒で演算できた。
【００３６】
上記実施形態の変形例としては、優先微分座標Ｔａが設定された箇所以外の画像データについは、図６に示すように、微分対象範囲（１＊Ｎ行列）が互いに重ならない状態で走査し、微分していく構成としてもよい。この際、隣接する微分対象範囲は、図示の如く、ＸＹ軸（主，副走査）方向にそれぞれ所定画素づつ間隔を空けてもよい。
これにより、対象物Ｗの面上で突起Ｔが突出している箇所以外の範囲における面の状態を検出することができるようになる。
例えば、この面上で所定の微分値が得られた場合には、不要な突起（例えば、半田の落下等により対象面Ｗ上に半田が誤って形成されている場合等）を検出することができるようになる。
【００３７】
〔第２実施形態〕
第２実施形態では、対象物Ｗの画像データを所定の領域単位で複数に分割する。
例えば、対象物Ｗがプリント基板の場合、このプリント基板に反りがあると前述した微分値に影響が生じ、突起の有無を誤検出することがある。即ち、プリント基板に反りがある場合、対象物Ｗの面（一般的にレジスト面）の画素ａの高さ位置と、突起Ｔの頂部の画素ｂとの間の高さの差分が変化する。
【００３８】
したがって、この実施形態では、座標設定手段２ａは、反りの影響を低減化させるために対象物Ｗの画像データを反りの影響がない範囲で予め複数の領域に分割する。分割された領域は、図７に示すように、それぞれ前記突起Ｔが含まれる領域Ｙと、含まれない領域Ｎに大別されている。
ここで、領域の設定は、突起Ｔの配置間隔と、外径情報（外接長方形）の大きさに基づき、図示の如く、隣接する最小間隔の突起Ｔ同士が異なる領域Ｙ，Ｙとなる範囲に設定する。
【００３９】
上記構成による凹凸検出の処理内容を図８のフローチャートを参照して説明する。同図において第１実施形態（図５と同様の処理内容）については説明を省略する。
走査手段３ａは、各領域毎に走査を実行する（Ｓ３’）。図７中▲１▼，▲２▼，▲３▼，…の順に各領域単位で走査する。
突起Ｔが存在する領域Ｙについては、前記の如く画像データを優先微分座標Ｔａ部分に走査した状態で、微分演算手段３ｂは行列サイズ設定手段２ｂで設定された微分対象範囲（１＊Ｎ行列）で微分を実行する（Ｓ４Ａ）。
一方、突起Ｔが存在しない領域Ｎについては、図７に記載の如く、微分対象範囲（１＊Ｎ行列）が互いに重ならない範囲に配置して微分を実行する（Ｓ４Ｂ）。
【００４０】
これにより、凹凸検出手段３ｃは、領域分割された各領域Ｙ，Ｎについて、突起有りの領域Ｙでは突起Ｔの微分値に基づきこの突起Ｔの有無を検出し、出力手段５に出力する。
一方、突起無しの領域Ｎでは微分値に基づき突起Ｔが無い状態（面状態）を検出することができる。
従って、例えば、突起無しの領域Ｎで所定の微分値が得られた場合には、不要な突起（例えば、半田の落下等により領域Ｎ上に半田が誤って形成されている場合等）の存在を検出できるようになる。
【００４１】
上記の各実施形態では、対象物上の突起を検出する構成を例に説明したが、逆に凹部を検出する構成に変更することもできる。検出された対象物Ｗの面の高さデータと凹部の高さデータから凹部の溝深さを求めて凹部の有無等を判断することができる。
【００４２】
【発明の効果】
本発明によれば、両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する所定画素分の行列サイズが設定され、画像データを走査して各突起部分で両端の画素の高さデータから絶対高さを演算する構成であるため、画像データ全体を走査せずとも良く、少ないデータ個数で凹凸を精度良く検出することができるようになる。簡単な演算で凹凸検出を行えるため、高速な凹凸検出が可能となり、対象物全体の画像データが大きくても、各凹凸を短時間で検出することができるようになる。
また、演算後の凹凸の絶対高さを所定の判断基準に基づき凹凸の状態を判断する構成としてもよく、対象物上での凹凸の有無、欠損を検出できるようになる。また、行列サイズは、１ラインの主走査方向に沿って両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する１＊Ｎ行列の行列サイズで設定すればよく、これにより最も少ないデータ個数で凹凸を検出することができるようになる。また、対象物上で凹凸が配置されていない領域について、設定されている行列サイズの画素が互いに重ならないよう走査すればこの領域での凹凸を検出することができるようになる。
また、予め画像データを凹凸が設けられた領域と凹凸が設けられていない領域とに分け、凹凸が設けられた領域では、この凹凸部分のみ順次走査して凹凸の絶対高さを検出し、凹凸が設けられていない領域では、行列サイズの画素が互いに重ならないよう走査すれば、対象物表面上の絶対高さを検出することができるようになる。これにより、本来凹凸が設けられていない領域で凹凸があればこれを検出できるようになり、製品不良等の判断に用いることができるようになる。
【００４３】
本発明の凹凸検出方法によれば、画像データ上の凹凸の座標位置に基づき、凹凸部分のみを走査して絶対高さを演算する構成であるため、画像データ全体を走査せずとも良く、従来に比して少ないデータ個数と簡単なステップ数で凹凸を検出できるため、凹凸検出の高速化を達成できる、また、対象物全体の画像データが大きくても、各凹凸を短時間で検出できるようになる。
また、各突起の外径情報に基づき、凹凸の座標位置を１ラインの主走査方向上にある１点の外接縁部に設定すれば、この１点を基準に両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置させるだけで凹凸を検出できるようになる。
また、行列サイズは、１ラインの主走査方向に沿って両端の画素が対象物の表面上と凹凸表面上にそれぞれ位置する１＊Ｎ行列の行列サイズに設定すれば最小の２個の画素数で凹凸を検出できるようになる。
【図面の簡単な説明】
【図１】本発明の凹凸検出装置の第１実施形態を示すブロック図。
【図２】対象物上の突起の配置を示す図。
【図３】微分対象範囲の設定状態を示す図。
【図４】突起の拡大図。
【図５】突起検出の処理手順を示すフローチャート。
【図６】突起無しの部分での走査状態を示す図。
【図７】対象物上での領域分割状態を示す図。
【図８】本発明の第２実施形態における突起検出の処理手順を示すフローチャート。
【図９】従来の凹凸検出方法を示す図。
【符号の説明】
１…画像入力手段、２…設定手段、２ａ…座標設定手段、２ｂ…行列サイズ設定手段、３…処理手段、３ａ…走査手段、３ｂ…微分演算手段、３ｃ…凹凸検出手段、４…記憶手段、５…出力手段、Ｔ…突起、Ｔａ…優先微分座標、Ｎ…行列サイズ。
【図１】
0003618599.tif 000002
【図２】
0003618599.tif 000003
【図３】
0003618599.tif 000004
【図４】
0003618599.tif 000005
【図５】
0003618599.tif 000006
【図６】
0003618599.tif 000007
【図７】
0003618599.tif 000008
【図８】
0003618599.tif 000009
【図９】
0003618599.tif 000010