OpenCV4で実現するテンプレートマッチングのマスク処理対応

製造業における画像処理技術は、品質管理や工程監視においてますます重要性を増しています。弊社では社内画像ライブラリをOpenCV2からOpenCV4へとアップグレードし、テンプレートマッチングにおけるマスク処理への対応を実現しました。

OpenCV2の限界とOpenCV4の進化

OpenCV2では、テンプレートマッチングにおいてマスク画像を使用することができず、背景ノイズや不要領域が一致率に影響を与えるケースが多くありました。これにより、微細な部品の検出や位置合わせにおいて誤検出が発生するリスクがありました。

OpenCV4では、テンプレートマッチングにマスク画像を指定できるようになり、テンプレート画像の中で注目すべき領域だけを比較対象にすることが可能となりました。これにより、検出精度の向上誤検出の低減が期待できます。

製造現場での活用例

例えば、電子部品の外観検査において、端子部分のみをテンプレートとしてマッチングさせることで、基板の模様や背景の影響を排除できます。これにより、検査工程の自動化がより高精度に行えるようになり、不良品の流出防止にもつながります。

今後の展望

弊社では、OpenCV4の導入を皮切りに、AIベースの画像認識技術(YOLOやTensorFlowなど)との連携も視野に入れ、より高度な検査・分析システムの構築を進めています。画像処理の精度と柔軟性を両立させることで、製造業のDX(デジタルトランスフォーメーション)を支援してまいります。

画像処理の導入や既存システムの改善をご検討中の方は、ぜひお気軽にご相談ください。

数学の面白さ

こんにちは mtj です

プログラマーに数学がいるかいらないかについては自分はプログラムを書くだけならいらないと思っている派です
現代であれば誰かが作ったライブラリを使えば計算も気にせず思った通りの物がだいたい作れてしまいます。

しかし プログラムはそういったとこまで自分が作るので楽しいという側面があります。
物理現象等を再現するのに大事になってくるのが数学、各学問の計算式等になります

自分も学生の時に物理と流体の本を読みながら流体のシミュレーターのような物を作成しました
再現に必要な計算式をピックアップしコードに落とし込み 実際の流体動作の再現をできた時はかなり楽しい物でした

アナログな電気回路を再現するならそれらの知識 自分がやったような流体であれば物理系の知識 波形、光学であればそういった知識等
現実世界で発生している現象をデジタル、ソフトで再現するというのはソフトの触り始めとしても悪くないのではないかと思いました

それこそ始めたてはコンソールでHello worldを出したりしますが 慣れてきたら自分で頭を作って作るアプリが一番楽しいと思います

C#11と12の機能いくつか

本日から弊社のメインとなる案件のプロジェクトにて
使用可能なC#のバージョンが12まで引き上げられました。
(今までは9や10でした。)
使用可能になった11と12の機能にさらっと目を通して来たので、
知らなかった便利そうな機能や使ってみたかった機能を4つほど紹介してみます。

1. 生文字列リテラル

string longTxt = """
    toooooooooooooooooooo...
        looooooooooooooooooong...
            teeeeeeeeeeeeeeeeeeeeeext...
    """;

文字列をダブルクォーテーション3つで囲うことで、
エスケープなしで改行や特殊記号などを含めた生の文字列を
ソース内に直接記述可能となるそうです。
改行を含んだ長文の文字列の可読性が改善されてかなり便利そうなのですが、
社内ツールの英語化用日本語抽出ツールに対応が必要になりそうなのは懸念点です。

C# 11 の新機能 – C# ガイド – C# | Microsoft Learn

2. コレクション式

List<int> No = [1, 2, 3];

リストなどのコレクションの値をpythonのような構文で
簡潔に作成できるようになったようです。
毎度冗長だな、、、と思いながら書いていたのでありがたいです。

C# 12 の新機能 – C# ガイド – C# | Microsoft Learn

3. ファイル修飾子

file class LocalObject { }

可視性を記述されたソースファイル内に限定する修飾子です。
ファイル外のクラスとは名前の競合も起こらないので、
そのソースでしか使用しないちょっとしたクラスを定義するのに便利そうです。
使ってみたかったのでうれしいです。

ファイル キーワード – C# reference | Microsoft Learn

4. usingによるタプルのエイリアス

using AtoF = (int A, int B, int C, int D, int E, int F);

usingによりタプルに名前を付けることができます。
何度か登場して冗長に感じるもクラスにするほどではないタプルを
省略して書けるので便利そうです。
使いたいことが今まで何度かあって、
その度に言語バージョンに泣かされていたのでこれもうれしいです。

タプル型 – C# reference | Microsoft Learn

以上です。
他の機能も含め新機能使っていきたいです。