opencv の欠陥検出

 

  • 自動生産設備の普及に伴い、さまざまな業界で産業用ロボットの導入が進み、生産ラインでは手作業を自動化する自動化生産が進んでいます。ロボットの仕分けプロセスでは、ロボットは仕様や品質が異なる製品を指定されたパレットに正確に配置できるだけでなく、ビジョンシステムを通じて物体の表面欠陥を識別して分類することもできます。インダストリー 4.0 時代の到来により、従来の外観検査技術は現代の工業生産の要件を満たすことができなくなり、外観検査技術は現代の工業生産に不可欠な部分になりました。マシン ビジョン システムでは、欠陥の検出は非常に重要なリンクです。マシンビジョンシステムにおける欠陥検出とは、画像収集プロセス中に特定のアルゴリズムを通じて収集された画像を自動的に処理した後、ターゲットオブジェクトを自動的に抽出、セグメント化、識別、追跡することを指します。これらのアルゴリズムによる処理を経て対象物情報を取得した後、対象物の欠陥が自動的に識別され、マークされます。工業生産における欠陥検出は主に次のカテゴリに分類されます。

    • 1. 画像のセグメンテーション

      画像のセグメンテーションとは、画像全体から各部分を分離し、画像が明確な境界を持つ意味のある単位になるようにすることです。セグメンテーション オブジェクトに応じて、画像を複数の領域に分割できます。画像セグメンテーションはマシン ビジョン システムの基本的なタスクであり、主に形態学、エッジ検出、領域拡張、しきい値セグメンテーションなどの方法が含まれます。形態学的オペレータは境界を直接生成でき、操作が便利で簡単です。エッジ検出は位置決めに適したエッジ情報を取得できます。領域拡張およびしきい値セグメンテーション手法は、同じ画像上のターゲットと背景の差分情報を取得できます。より正確なターゲット境界を取得します。画像セグメンテーション方法は数多くありますが、これらの方法にはすべて、ノイズの影響を受けにくいという共通の特徴があります。ノイズを抑制するために、人々は多くの場合、一連のアルゴリズムを使用します。例: 数学的形態学で一般的に使用されるオープニング操作、クロージング操作など、Canny オペレーターなどのエッジ検出に基づく方法、しきい値選択に基づく方法、領域拡張に基づく方法など。これらの方法では良好な結果が得られますが、しきい値を手動で選択する必要があるため、計算量が多くなります。現在一般的な画像セグメンテーション技術には、ピクセル グレースケール情報とエッジ検出アルゴリズムの組み合わせに基づくもの、領域拡張アルゴリズムに基づくもの、領域拡張アルゴリズムと組み合わせた数学的形態学に基づくもの、形態学的演算子としきい値選択アルゴリズムの組み合わせに基づくものなどが含まれます。

      • 1. ピクセルのグレースケール情報とエッジ検出アルゴリズムの組み合わせに基づく

        この方法は、エッジ検出とグレースケール形態を組み合わせて、ターゲットの背景を知らなくてもターゲット認識を実現します。基本的な考え方は、デジタル画像処理でエッジ検出オペレーターを使用して元の画像を処理し、エッジに関連する局所的な特徴情報を取得し、これらの特徴情報を使用してターゲット認識を達成することです。Canny オペレーターは、現在最も広く使用されている最良のエッジ検出オペレーターです。ピクセル単位でグレーの階調情報を利用し、より正確にエッジ情報を検出できます。Canny オペレーターの利点は、エッジ情報を正確に抽出でき、ノイズの影響を受けないことですが、欠点は、計算量が多く時間がかかることです。Canny オペレーターの欠点を克服するために、研究者はさまざまな改良されたアルゴリズムを提案してきました。例: (1) ハフ変換 (H): H はエッジを抽出できませんが、ターゲットと背景の差分情報を取得できます。(2) バイモーダル方式:ノイズは除去できますが、対象物と背景の間の情報が失われます。(3) 勾配法: 勾配の振幅と方向を分析すると、エッジをより適切に抽出できます。(4) マルチスケール法:複数のスケールの情報を組み合わせて問題を検討することで、対象エッジ情報をより正確に検出できます。

      • 2. 数学的形態学と領域拡張アルゴリズムの組み合わせに基づく

        数学的形態学は、画像の構造要素を変換することによる画像解析のための数学的ツールであり、効果的にノイズを除去し、オブジェクトを強調表示できます。領域拡張アルゴリズムは領域ベースのセグメンテーション手法であり、領域拡張手法を画像セグメンテーションに適用する効果的な方法です。現在、国内外で領域成長アルゴリズムの応用に関する多くの研究が行われており、例えば、Zhang Junhong らは数学的形態学と領域成長を組み合わせ、形態侵食操作を使用してターゲットを強化し、強化されたターゲット上で領域成長を実行します。 image. 、最後にセグメンテーション結果を取得します。この方法を使用して得られる結果には、鮮明なエッジ、ノイズ干渉がない、正確な位置決めという利点があります。ただし、この方法にはいくつかの欠点もあります。領域拡張アルゴリズムでは、画像セグメンテーション プロセス中にシード ポイントとしきい値を手動で決定する必要があり、単純な構造要素のみをセグメント化できますが、複雑な構造要素をセグメント化することはできません。

    • 2. 特徴抽出

      画像特徴抽出とは、後続の処理の入力データとして画像の特徴データを抽出することです。通常、画像の特徴には次のようなものがあります。 (1) グレースケールの特徴: グレースケール情報はマシン ビジョンで最も重要な特徴の 1 つであり、画像処理において非常に広範囲に応用できます。グレースケール情報とは、明るさやコントラストなど、位置の変化に伴う画像内の画素値の変化情報を指します。グレースケール情報は、オブジェクトの形状、サイズ、照明条件、背景などの要素とは独立して記述できるため、マシン ビジョンにおいて非常に重要な機能でもあります。(2) エッジ検出機能: エッジ検出はマシンビジョンにおける非常に重要な研究内容です。物体を光学カメラに置いて撮影すると、物体表面の情報が光学イメージセンサーに保存され、エッジ検出アルゴリズムを通じて画像内の物体表面情報が抽出されます。一般的に使用されるエッジ検出アルゴリズムには、Canny エッジ検出アルゴリズム、Hough 変換エッジ検出アルゴリズム、Hough 変換エッジ検出アルゴリズムが含まれます。(3) テクスチャの特徴: テクスチャは、画像内の異なるオブジェクト間の関係を記述する一種の情報であり、粗さ、グレースケール、空間分布など、オブジェクト表面のさまざまな特徴的な属性が含まれます。特定の種類のオブジェクトまたは表面には、特定の種類のテクスチャ情報が必要です。一般的なテクスチャの特徴には、グレーレベルの共起行列、ヒストグラム、グレーレベルのヒストグラムなどが含まれます。(4) 幾何学的特徴とは、形状に関連する、または形状によって記述される特徴を指します。これらの特性に基づいて、オブジェクトは線、円柱、直方体、直方体などのさまざまなタイプに分類できます。幾何学的特徴は通常、円形度、真直度、真円度、アスペクト比など、物体の表面形状を記述するために使用されます。(5) 色の特性: 色は、物体の表面の色情報とその特性の間の関係を記述する方法です。たとえば、オブジェクトの色の違いは、反射率や透過率などの特性が異なります。したがって、欠陥検出に色を使用できます。一般的な色の特性は、RGB (赤、緑、青)、CMYK (白)、YCbCr (黄色) などです。(6) テクスチャの特徴: テクスチャとは、物体の表面上の特定の種類または特徴情報を指します。たとえば、オブジェクトが円の場合、円形と非円形という 2 つの異なるタイプまたは特性が存在する可能性があります。したがって、テクスチャ特徴を欠陥検出に利用することにより、対象物体に欠陥があるかどうかをより正確に識別することができる。

    • 3. 欠陥の特定

      欠陥認識とは、欠陥を自動的に識別する手法であり、基本的な考え方は、対象物体に欠陥があると特定の信号を発し、その信号が周囲のバックグラウンド信号と一定の比率に達したときに、対象物体が欠陥であることを検出するというものです。ある欠陥があります。生産プロセス中、産業用ロボットは視覚検査システムを通じて対象物の欠陥を自動的に特定し、マークを付けることができます。工業生産レベルの向上に伴い、この方法は徐々に他の産業にも適用されてきました。たとえば、半導体産業では、チップに欠陥が存在する場合、作業者はハンドヘルド デバイスまたはロボットを使用してチップを基板から分離します。

以下に、一般的に使用される OpenCV 欠陥検出コードの例をいくつか示します。

1. エッジ検出:
```python
import cv2
# 画像の読み取り
img = cv2.imread('image.jpg')
# グレー
スケール grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# エッジ検出
エッジ = cv2.Canny(gray) , 50, 150)
# 結果を表示
cv2.imshow('Edges',edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
````
2. 輪郭検出:
``` python
import cv2
# 画像を読み込む
img = cv2.imread('image.jpg')
# グレースケール
グレー = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# エッジ検出
エッジ = cv2.Canny(gray, 50, 150)
# 輪郭検出
輪郭、階層 = cv2.findContours (edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 等高線を描画します
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 結果を表示
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
````
3. ライン検出:
```python
import cv2
import numpy as np
# 画像を読み取る
img = cv2.imread('image.jpg')
# グレー
スケール grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# エッジ検出
エッジ = cv2 .Canny(gray, 50, 150)
# ライン検出
ライン = cv2.HoughLines(edges, 1, np.pi/180, 200) #ライン内のラインの
直線を描画します: rho, theta = line[0] a = np .cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho x1 = int(x0 + 1000 * (-b))







y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(img, (x1, y1), ( x2, y2), (0, 0, 255), 2)
# 結果を表示
cv2.imshow('Lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
````
これらのコード例は使用できます。一般的な欠陥検出タスクには適用されますが、特定のアプリケーションは実際の条件に応じて調整および最適化する必要があります。

おすすめ

転載: blog.csdn.net/qq_42751978/article/details/130809255