Baumer 産業用カメラ Baumer 産業用カメラは、BGAPISDK と Halcon をどのように組み合わせて画像ヒストグラム アルゴリズムの拡張を実現するか (C#)


Baumer 産業用カメラ

Baumer 産業用カメラ Baumer カメラは高性能、高品質の産業用カメラで、物体検出、カウントと認識、モーション分析、画像処理など、さまざまなアプリケーション シナリオで使用できます。

バウマーの 10 ギガビット カメラは優れた画像処理性能を備え、高解像度の画像をリアルタイムで送信できます。さらに、このカメラは、高速データ転送、低消費電力、容易な統合、および高いスケーラビリティを備えています。
バウマー
産業用カメラは、その優れた安定した性能と品質により、高速同期取得の分野でよく使用され、通常はさまざまな画像アルゴリズムを使用して、キャプチャした画像の品質を向上させます。

バウマーの産業用カメラは、画像アルゴリズムを使用して画像に技術的背景を追加します

産業用カメラは、さまざまな画像アルゴリズムを使用して、キャプチャする画像の品質を向上させることがよくあります。これらのアルゴリズムは、画像の鮮明度、コントラスト、色の精度、および全体的な画像品質を向上させるように設計されています。

最も一般的に使用されるアルゴリズムの 1 つは、ノイズ削減アルゴリズムです。このアルゴリズムは、画像に存在する可能性のあるランダム ノイズやグレインを除去するために使用されます。もう 1 つの一般的なアルゴリズムは、画像安定化アルゴリズムです。このアルゴリズムは、手ブレによるブレを軽減するために使用されます。

産業用カメラでよく使用されるもう 1 つの画像アルゴリズムは、エッジ強調アルゴリズムです。このアルゴリズムは、画像のエッジのシャープネスを改善するために使用されます。画像内のエッジを検出し、それらのエッジのコントラストを高めることで機能します。

ヒストグラム均等化は、産業用カメラで使用されるもう 1 つの画像アルゴリズムです。このアルゴリズムは、画像で使用可能な値の範囲全体をカバーするようにピクセル値を再割り当てすることにより、画像のコントラストを改善します。

これらの画像アルゴリズムを総合すると、産業用カメラが鮮明で高品質の画像をキャプチャするのに役立ちます。これらは、最新のイメージング システムで重要な役割を果たしており、ロボット工学、顕微鏡、医療用イメージングなどの分野で重要です。

この記事では、対数対数変換を実行するために Halcon と組み合わせた Baumer 産業用カメラの画像アルゴリズムのみを使用します。

Baumer 産業用カメラは BGAPI SDK と Halcon を使用してヒストグラム画像強調アルゴリズムを使用

以下では、コールバック関数でヒストグラム変換と画像強調を直接実行する C# と Halcon の Baumer 産業用カメラのデモを紹介します。

1. 適切なクラス ファイルを参照する

コードは次のとおりです (例)。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BGAPI2;
using System.Runtime.InteropServices;
using System.IO;
using CSCameraDemo.Properties;
using System.Globalization;
using WindowsFormsApplication1;
using System.Threading.Tasks;
using System.Threading;
using System.Drawing.Imaging;

using HalconDotNet;

2. BGAPI SDK は、画像コールバックで Halcon のヒストグラム変換拡張アルゴリズムを参照します。

コードは次のとおりです (例)。C# 呼び出しコードは次のとおりです。

void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{
    
    
    try
    {
    
    
        BGAPI2.Buffer mBufferFilled = null;              
        mBufferFilled = mDSEvent.BufferObj;
        if (mBufferFilled == null)
        {
    
    
            MessageBox.Show("Error: Buffer Timeout after 1000 ms!");
        }
        else if (mBufferFilled.IsIncomplete == true)
        {
    
    
            //MessageBox.Show("Error: Image is incomplete!");
            //queue buffer again
            mBufferFilled.QueueBuffer();
        }
        else
        {
    
    
            #region//获取当前FrameID
            FrameIDInt = (int)mBufferFilled.FrameID;
            OnNotifySetFrameID(FrameIDInt.ToString());
            #endregion

            //将相机内部图像内存数据转为bitmap数据
            System.Drawing.Bitmap bitmap  = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height, (int)mBufferFilled.Width,
                System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));
                                      
            #region//Mono图像数据转换。彩色图像数据转换于此不同
            System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;
            int nColors = 256;
            for (int ix = 0; ix < nColors; ix++)
            {
    
    
                uint Alpha = 0xFF;
                uint Intensity = (uint)(ix * 0xFF / (nColors - 1));
                palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity, (int)Intensity, (int)Intensity);
            }
            bitmap.Palette = palette;
            #endregion


            #region//回调函数保存图像功能
            if (bSaveImg)
            {
    
    
                //使用bitmap自带函数保存
                string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                string saveimagepath = pImgFileDir  +"\\"+ strtime + ".jpg";
                bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);
          
                bSaveImg = false;//变量控制单次保存图像
            }
            #endregion

           //将Bitmap数据转为Halcon的Hobject
			Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); 
			BitmapDat srcBmpData=bmp.LockBits(rect,ImageLockMode.ReadOnly,
			PixelFormat.Format8bppIndexed);
			HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
			bmp.UnlockBits(srcBmpData);

            #region//对灰度图像进行直方图变换算法增强   
            Hobject ImageEquHisto;
			HOperatorSet.EquHistoImage (image, ImageEquHisto)		
            #endregion


            #region//bitmap的图像数据复制pBitmap
            Bitmap clonebitmap = (Bitmap)bmp.Clone();
            BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, clonebitmap.Width, clonebitmap.Height), ImageLockMode.ReadOnly, clonebitmap.PixelFormat);
            clonebitmap.UnlockBits(data);
            pBitmap = clonebitmap;
            #endregion
            #region//将pBitmap图像数据显示在UI界面PictureBox控件上
            prcSource.X = 0;prcSource.Y = 0;
            prcSource.Width = (int)mBufferFilled.Width;prcSource.Height = (int)mBufferFilled.Height;
            System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);
            graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);
            #endregion

            clonebitmap.Dispose(); //清除临时变量clonebitmap所占内存空间
            mBufferFilled.QueueBuffer();

        }
    }
    catch (BGAPI2.Exceptions.IException ex)
    {
    
    
        {
    
    
            string str2;
            str2 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str2);
        }
    }
    return;
}

3. Halcon と組み合わせて、画像強調のためのヒストグラム変換アルゴリズムを実行します。

C# 呼び出しコードは次のとおりです。

//将Bitmap数据转为Halcon的Hobject
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); 
BitmapDat srcBmpData=bmp.LockBits(rect,ImageLockMode.ReadOnly,
PixelFormat.Format8bppIndexed);
HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
bmp.UnlockBits(srcBmpData);

   
#region//对灰度图像进行直方图变换算法增强   
Hobject ImageEquHisto;
HOperatorSet.EquHistoImage (image, ImageEquHisto)		         
#endregion

#endregion

レンダリング効果は次のとおりです。
(ヒストグラム均等化画像アルゴリズムを使用しない場合)
ヒストグラム均等化を使用しない画像アルゴリズム
(ヒストグラム均等化画像アルゴリズムを使用する場合)
ここに画像の説明を挿入

画像アルゴリズムを使用して画像を強化する Baumer 産業用カメラの利点

  1. 画質の向上: 画像アルゴリズムを使用することで、産業用カメラは非常に詳細で鮮明な画像を生成できます。これらのアルゴリズムは、ノイズを減らし、エッジを強調し、コントラストを上げて、画質を向上させます。

  2. 精度の向上: 画像アルゴリズムは、非常に正確な測定値とデータを提供することもできます。エッジ検出やパターン認識などの画像解析技術を使用することで、産業用カメラは対象物をより正確に識別および測定できます。

  3. 費用対効果: 画質と精度を向上させることで、産業用カメラは手作業による検査の必要性を減らし、品質管理と製品の不合格に関連するコストを削減できます。

  4. 効率の向上: 画像解析プロセスを自動化することで、産業用カメラはスループットを向上させ、サイクル タイムを短縮し、生産ラインをより効率的にすることができます。

  5. 意思決定の改善: 画質と精度が向上した産業用カメラは、意思決定者に非常に詳細で信頼性の高いデータを提供できるため、意思決定者は生産プロセスと品質管理についてより多くの情報に基づいた意思決定を行うことができます。

画像アルゴリズムを使用して画像を強化する Baumer 産業用カメラの産業用アプリケーション

画像アルゴリズムを備えた産業用カメラは、画像を強化して製品の品質、安全性、および効率を向上させるために、さまざまな業界で広く使用されています。以下に、その適用例をいくつか示します。

  1. 製造: 画像処理アルゴリズムを備えた産業用カメラは、組立ラインの欠陥検査、製品の品質チェック、および安全基準への準拠の確認に使用されます。また、製造中に部品を検査するために使用することもできます。これにより、欠陥を早期に検出し、コストのかかる生産の遅延を防ぐことができます。

  2. 自動車産業: 自動車産業では、画像アルゴリズムを備えた産業用カメラが安全検査で広く使用されており、自動車部品の欠陥を検出し、ドライバーと乗客の安全を確保しています。また、事故後の損害評価にも使用できます。

  3. 航空宇宙: 産業用カメラは、航空宇宙産業で使用され、組み立て中および組み立て後の衛星、ロケット、およびその他の宇宙船のコンポーネントを検査します。画像アルゴリズムは、重要なコンポーネントの欠陥や故障を検出して、宇宙飛行士の安全と宇宙ミッションの成功を確保するのに役立ちます。

  4. 医療: 画像アルゴリズムを備えた産業用カメラは、医療アプリケーションで病気や病状を検出および診断するために使用されます。また、医療研究、分析、患者の健康状態の監視にも使用されます。

  5. 農業: 産業用カメラを使用して、作物の成長を監視し、農産物の品質をチェックし、作物の害虫や病気を検出できます。画像アルゴリズムは、問題を早期に検出するのに役立ち、農家が作物を保護するための是正措置を取ることができるようにします。

これらすべての業界で、画像アルゴリズムを備えた産業用カメラを使用すると、画像分析の効率と精度が大幅に向上し、製品品質の向上、安全性の向上、およびコストの削減につながります。

おすすめ

転載: blog.csdn.net/xianzuzhicai/article/details/130468630