- 調査・研究
エッジ検出で汚れ検知
先日、あるお客様より
「商品の検品時に、商品についた汚れや傷を検知しやすくするための仕掛けがないものか」
と、お問い合わせを頂きました。
そこで、弊社内で以前より調査していた「OpenCV」で何かできないかと思い検討してみました。
「OpenCV」(Open Source Computer Vision Library)とは、インテルが開発・公開したオープンソースのコンピュータービジョンライブラリであり、特に画像認識や物体検知等が有名ですが、今回検討したのはエッジ検出という機能です。
エッジ検出とは
エッジ検出とは画像処理の一種であり、端的に言えば画像の輝度が変わる境目を描写する仕組みのことです。
Wikipediaには以下の通り紹介されています。
「 エッジ検出(エッジけんしゅつ、 Edge detection)は、画像処理やコンピュータビジョンの用語で、特徴検出 (Feature detection) や特徴抽出 (Feature extraction) の一種であり、デジタル画像の画像の明るさが鋭敏に、より形式的に言えば不連続に変化している箇所を特定するアルゴリズムを指す。」
( この文章は、 クリエイティブ・コモンズ・表示・継承ライセンス3.0のもとで公表されたウィキペディアの項目「 エッジ検出」の文章を利用して記載しています。この文章は、 クリエイティブ・コモンズ・表示・継承ライセンス3.0の下、二次利用できます。)
OpenCVのエッジ検出を試してみる
エッジ検出にも様々な種類のものがありますが、一番精度の高そうな「キャニー法」というものを試してみます。
まずは単純な画像で試してみます。これは弊社のロゴマークです。
<エッジ検出前>
<エッジ検出後>
このようにエッジだけが色がついて、それ以外の個所は真っ黒になっています。
キャニー法の処理の中で、エッジに当たる箇所とそれ以外で2色化しているため、このような見え方になります。
上記のような単純な画像では面白くないので、もう少し複雑な画像を見てみましょう。
<エッジ検出前>
<エッジ検出後>
ホコリ以外の情報はほとんど消え、汚れが汚れとして見やすくなっています。
なお、ホコリをきれいにふき取ると、以下のように見えます。
<エッジ検出前>
<エッジ検出後>
奇麗になりましたね。
実際、検品を行うような環境下では、「光が当たって見えにくい!」なんて状況は少ないとは
思いますが、目検で検品を行う場合は結構使える仕組みなのではないかなと思います。
ソースは以下の通りになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# 画像読み込み image = cv2.imread('xxx.png',0) # キャニーフィルターをかける canny_image = cv2.Canny(image,30,100,3) canny_image_PIL=Image.fromarray(canny_image) canny_image_PIL_RGBA = canny_image_PIL.convert('RGBA') r, g, b,_ = canny_image_PIL_RGBA.split() # 白のセルを蛍光色に変更 canny_color = (255, 255, 255) rr = r.point(lambda _: 1 if _ == canny_color[0] else 0, mode="1") gg = g.point(lambda _: 1 if _ == canny_color[1] else 0, mode="1") bb = b.point(lambda _: 1 if _ == canny_color[2] else 0, mode="1") mask = ImageChops.logical_and(rr, gg) mask = ImageChops.logical_and(mask, bb) canny2_color = (20,255,63) canny_image_PIL_RGBA.paste(Image.new("RGB", canny_image_PIL_RGBA.size, canny2_color), mask=mask) image2 = cv2.cvtColor(np.asarray(canny_image_PIL_RGBA), cv2.COLOR_RGBA2BGRA) # 画像を出力 cv2.imwrite('xxx_out.jpg', image2) |
まとめ
エッジ検出機能自体は古くからある技術ですが、映像機器自体の精度も上がっていますし、
微小な傷も検知できる仕組みが作れそうです。なおこの仕組みは静止画像だけでなく動画でも実装可能です。
わざわざ写真を撮らなくても、動画を見ながら確認するということもできると思いますので、
様々なシーンでの活用が期待できると考えています。