[プログラミングを学ぶためのマスターカービング] MicroPythonハンズオン(08)-色を認識するためのゼロベースの学習MaixPy

午前中、百度で「色認識」を検索しましたが、少し大雑把な考えがありますが、これは昔ながらの実践的な実験であり、今後もアドバイスをお願いします。

OpenCV(Baidu Encyclopedia)
は、Linux、Windows、Android、およびMac OSオペレーティングシステムで実行できるBSDライセンス(オープンソース)に基づくクロスプラットフォームのコンピュータービジョンライブラリです。軽量で効率的です。一連のC関数と少数のC ++クラスで構成され、Python、Ruby、MATLABなどの言語へのインターフェイスも提供し、画像処理とコンピュータービジョンで多くの一般的なアルゴリズムを実装します。OpenCVはC ++で記述されており、そのメインインターフェイスもC ++ですが、それでも多数のC言語インターフェイスを保持しています。このライブラリには、Python、Java、MATLAB / OCTAVE(バージョン2.5)のインターフェイスも多数あります。これらの言語のAPIインターフェース機能は、オンラインドキュメントから入手できます。現在は、C#、Ch、Ruby、GOのサポートも提供しています。

OpenCVは1999年にIntelによって設立され、現在はWillowGarageによってサポートされています。OpenCVは、Linux、Windows、およびMac OSオペレーティングシステムで実行できるBSDライセンス(オープンソース)に基づくクロスプラットフォームのコンピュータービジョンライブラリです。軽量で効率的です。一連のC関数と少数のC ++クラスで構成され、Python、Ruby、MATLABなどの言語へのインターフェイスも提供し、画像処理とコンピュータービジョンで多くの一般的なアルゴリズムを実装します。OpenCVには、500を超えるC関数を含むクロスプラットフォームの中高レベルAPIがあります。他の外部ライブラリには依存しませんが、一部の外部ライブラリも使用できます。OpenCVは、インテル®IntegratedPerformance Primitives(IPP)に透過的なインターフェースを提供します。これは、特定のプロセッサ用に最適化されたIPPライブラリがある場合、OpenCVは実行時にこれらのライブラリを自動的にロードすることを意味します。(注:OpenCVバージョン2.0のコードは大幅に最適化されており、パフォーマンスを向上させるためにIPPは必要ないため、バージョン2.0はIPPインターフェイスを提供しなくなりました)

ここに写真の説明を挿入

OpenCVの概要
そのフルネームは、オープンソースのコンピュータービジョンライブラリであるオープンソースのコンピュータービジョンライブラリです。言い換えれば、それはコンピュータビジョンのためのオープンソースAPI関数ライブラリのセットです。これは、次のことも意味します。
(1)科学研究であろうと商用アプリケーションであろうと、開発に使用できます。
(2)すべてのAPI関数のソースコードは公開されており、内部実装のプログラムステップを確認できます。
(3 )OpenCVのソースコードを変更し、必要な特定のAPI関数をコンパイルおよび生成できます。ただし、ライブラリとしては、一般的に使用されている、古典的で一般的なアルゴリズムのAPIのみを提供します。

一般的なコンピュータービジョンアルゴリズムには、次の手順を含める必要があります。
(1)データ取得(OpenCVの場合、画像です)、
(2)前処理、
(3)特徴抽出、
(4)特徴選択、
(5)分類の設計とトレーニング;デバイスの
(6)の分類と識別、
およびOpenCVのは、(単語を覚えている)は、それぞれ、これらの6つの部分のためのAPIを提供します。
ここに写真の説明を挿入
OpenCVに基づく色認識

カラーモデル
デジタル画像処理一般的に使用されるモデルは、RGB(赤、緑、青)モデルとHSV(色相、彩度、明るさ)です。RGBはカラーモニターやカラービデオカメラで広く使用されています。通常の写真は通常RGBモデルです。HSVモデルは、人々が色を記述および解釈する方法とより一致しています。HSVの色の記述は自然で、人々にとって非常に直感的です。

HSVモデル
HSVモデルのカラーパラメータは、色相(H:色相)、彩度(S:彩度)、明るさ(V:値)です。1978年にARスミスによって作成された色空間。Hexconeモデルとしても知られています。

色相(H:色相):角度で測定した値の範囲は、赤から反時計回りに0°〜360°、赤は0°、緑は120°、青は240°です。補色は、黄色が60度、シアンが180度、マゼンタが300度、
彩度(S:彩度):値の範囲が0.0〜1.0で、値が大きいほど彩度が高くなります。
明るさ(V:値):値の範囲は0(黒)から255(白)です。

RGBをHSVに変換します。
(r、g、b)を色の赤、緑、青の座標とし、それらの値を0から1までの実数とします。maxをr、g、およびbの最大値と同等とします。minをこれらの値の最小値に等しくします。HSV空間で(h、s、v)の値を見つけるには、h∈[0、360)は角度の色相角、s、v∈[0,1]は彩度と明るさです。OpenCVには、RGBモデルをHSVモデルに直接変換できる関数があります。OpenCVでは、H∈[0、180)、S∈[0、255]、V∈[0、255]です。H成分は基本的にオブジェクトの色を表すことができますが、SはHと白で表される色の混合の程度を表すため、SとVの値も特定の範囲内にある必要があります。 、Sが小さいほど、色が白いほど明るい色になります。Vは、Hと黒で表される色の混合度を表します。つまり、Vが小さいほど、色は暗くなります。青の値を大まかに識別するのは、100から140の範囲のH、90から255の範囲のSとVです。
ここに写真の説明を挿入

OpenCVの色認識のアイデア

1.スライダーを作成します。しきい値を調整し、さまざまな色を識別するために使用されます。

2.色空間変換:RGBをHSVモデルに変換して、さまざまな色のHSVのさまざまなしきい値で色を識別できるようにします。これは、Opencvでcvtcolor()を使用することで実現できます。一般的に、カラー画像はRGB色空間であり、HSV色空間モデルは、人々の生活でさらに一般的に使用されているカラーシステムであり、TVリモコン、絵画のパレット、および明るさの調整時に使用されます。テレビを見ている間、それは非常に一般的です。なぜなら、それは人々が色を説明する方法、つまりそれが何色であるか、どれほど暗いか、そしてどれほど明るいかとより一致しているからです。opencvでは、H、S、Vの値の範囲は、実際のモデル[0,360]、[0,1]、[ではなく、それぞれ[0,180)、[0,255)、[0,255)であることに注意してください。 0,1]。

3.ヒストグラム均等化:光の影響により、携帯電話で読み取られる画像の各フレームが明るすぎたり暗すぎたりする場合があります。ヒストグラム均等化により、各間隔のピクセルの分布がよりバランスよくなり、画像がレイヤー化されます。 。OpencvはequalizeHist()関数で実装できます。ヒストグラム均等化とは、元のヒストグラムを引き伸ばしてグレースケール全体に均等に分散させることで、画像のコントラストを高めます。ヒストグラム均等化の中心的な考え方は、元の画像のグレーヒストグラムを比較的集中した領域からグレー範囲全体で均一な分布に変更することです

4.二値化:画像のピクセルのグレー値を0または255に設定します。これにより、画像全体が明確な白黒効果を示します。グレースケール画像の二値化は、特定の範囲の情報を強調することができます。設定された間隔(abなど)のピクセルの色の値を255に設定し、範囲外の色の値を0に設定します。ただし、abとの値が異なると、2値化の効果は大きく異なります。

5.オープン操作:画像のノイズ、つまり干渉情報を除去するために使用されます。OpencvはgetStructuringElement()関数を使用して、対応する設定を行うことができます。開く操作は、画像の拡大と侵食に基づいています。拡大とは、画像のハイライト部分の「フィールド拡大」です。エフェクト画像のハイライト領域は元の画像よりも大きく、侵食とは、元の画像が食い尽くされます。、エフェクト画像のハイライト領域が元の画像よりも小さくなります。開く操作は、最初に画像を腐食し、次に拡大して小さなオブジェクトを排除することです。数学的原理は、畳み込みカーネルBを定義し、それをターゲット画像と畳み込み、対応する効果を実現することです。さまざまな形やサイズの核はさまざまな効果をもたらします。

6.閉じる操作:開く操作の後に、いくつかの切断された領域がある場合があります。閉じた操作は、これらの接続されていない領域を閉じて、画像をより完全にすることができます。閉鎖操作は開放操作の反対で、最初に膨張してから腐食し、小さなブラックホールを除去するために使用されます。原理は開放操作と同じです。

5色のルービックキューブがあるので、色を識別するための実験的な小道具として使っています。
ここに写真の説明を挿入
MaixPy IDEを開き、[ツール]-[マシンビジョン]-[値エディター]を
ここに写真の説明を挿入
選択します。ソースイメージの位置を開き、フレームバッファーを選択します。
ここに写真の説明を挿入

主にバイナリイメージ列でLAB値を調整します。白いピクセルは追跡するピクセルです。
ここに写真の説明を挿入
ラボの色空間の
名前を十分に理解して
ください開始する前に、ラボの色空間の名前を明確にしてくださいラボ
のフルネームはCIELABです。CIELab*と表記されることもあります。CIE
は、照明と色に関する国際機関であるInternational Commission on Illumination(International Commission on Illumination)の略です。
チャネル
ラボは、輝度チャネル(チャネル)と2つのカラーチャネルで構成されています。ラボ色空間では、各色は3つの数字L、a、bで表されます。各コンポーネントの意味は次のとおりです
。Lは明るさ
表し、
a緑から赤までのコンポーネントを表します。b青から赤までのコンポーネントを表します。黄色の
知覚ユニフォーム
ラボは、人々の色の知覚に基づいて設計されています。具体的には、知覚ユニフォームです。知覚的均一性とは、数(つまり、上記の3つの数、L、a、およびb)が同じ範囲で変化する場合、同じ視覚的変化をもたらすことを意味します。ラボはRGBやCMYKの色空間よりも人間の視覚に沿っており、調整が簡単です。明るさを調整する場合は(ヘルムホルツ・コールラウシュ効果に関係なく、以下の注を参照)、Lチャネルを調整します。カラーバランスのみを調整したい場合は、aとbを調整してください。
注:ヘルムホルツ-コールラウシュ効果は人間の目の錯覚です。彩度が高いと、色が明るく見えます。
デバイスに依存しない
ラボには、デバイスに依存しない(デバイスに依存しない)という非常に優れた機能があります。つまり、色空間の白色点(下図に色空間の白色点を示します)が与えられると、この色空間は各色の作成方法と表示方法を明確に決定できます。これは表示とは関係ありません。使用される媒体。ラボでは、白色点を基準にした色を定義していることに注意してください。白色点の色を定義した後(たとえば、CIE標準光源D50として定義)になって初めて、他の色を知ることができます。
数値範囲
理論的には、L、a、およびb
はすべて実数ですが、実際には、一般に整数範囲に制限されます
。L大きいほど、明るさが高くなります。Lが0の場合は黒を表し、100の場合は白を表します。
aとbが0の場合、両方とも灰色を表します。
ときに正の数に負の数の変更、対応する色は緑色から赤色に変化します。
b
が負の数から正の数に変わり、対応する色が青から黄色に変わります。
実際のアプリケーションでは、カラーチャネルの範囲を-100〜 +100または-128127の間に設定することがよくあります。
視覚化
ご覧のとおり、Lab *には3つのコンポーネントがあるため、3次元空間で表示できます。2次元空間では、色度図を使用して視覚化します。つまり、明るさLを固定し、aとbの変化を確認します。これらの視覚化は正確ではなく、人々が理解するのに役立つだけであることに注意してください。

ここに写真の説明を挿入
LABカラーモデル

これは、1931年にCommission International Eclairage(CIE)によって確立された色測定の国際規格に従って確立されています。1976年に改良され、カラーモードと名付けられました。ラボカラーモデルは、RGBおよびCMYKカラーモードの欠点を補います。デバイスに依存しないカラーモデルであり、生理学的特性に基づくカラーモデルです。ラボカラーモデルは3つの要素で構成され、1つの要素は明るさ(L)で、aとbは2つのカラーチャネルです。aには、濃い緑(低輝度値)から灰色(中輝度値)、明るいピンク(高輝度値)までの色が含まれます。bは、明るい青(低輝度値)から灰色(中輝度値)、そして黄色(高輝度値)までの色です。明るさの値)。したがって、この混色は明るい色を生成します。

ラボモードは、光やペイントに依存しません。これは、CIE組織によって決定されたカラーモードであり、理論的には人間の目で見ることができるすべての色が含まれます。ラボモードは、RGBおよびCMYKカラーモードの欠点を補います。RGB色空間と比較すると、Labは珍しい色空間です。これは、1931年に国際照明委員会(CIE)によって確立された色測定の国際規格に基づいて設立されました。1976年に、変更後に正式にCIELabと名付けられました。これは、デバイスに依存しないカラーシステムであり、生理学的特性に基づくカラーシステムです。これは、デジタル手法を使用して人間の視覚を表現することも意味します。ラボ色空間のL成分は、ピクセルの明るさを表すために使用されます。値の範囲は[0,100]で、これは純粋な黒から純粋な白を意味します。aは赤から緑の範囲を意味し、値の範囲は[ 127、-128]; bは黄色から青までの範囲を表し、値の範囲は[127、-128]です。次の図は、Lab色空間のアイコンを示しています。

ラボの色空間は、コンピューターモニターの色域、さらには人間の視覚よりも大きく、ラボのビットマップは、RGBまたはCMYKのビットマップと同じ精度を得るには、より多くのピクセルデータを必要とすることが表現されています。ラボモードはほとんどの色を定義し、光や機器とは関係ありません。処理速度はRGBモードと同じくらい速く、CMYKモードよりもはるかに高速です。したがって、画像編集でラボモードを安全に使用できます。さらに、ラボモードをCMYKモードに変換しても、色が失われたり置き換えられたりすることはありません。したがって、色の損失を回避する最善の方法は、ラボモードを使用して画像を編集してから、CMYKモードに変換して印刷することです。

#MicroPythonハンズオン(08)-ゼロベースの学習MaixPy認識カラー

#Experimental program one:赤いブロブが赤いブロックを動的に認識するのを見つける

最適なカラートラッキングしきい値を選択し、スライドバーを使用してしきい値を調整し、バイナリイメージの赤いブロックを強調表示してください(白で表示)。

測定されたLAB値は次のとおりです:55、70、42、65、52、8

ここに写真の説明を挿入
#MicroPython手作業で行う(08)-ゼロベースの学習MaixPyの認識色
#実験手順の1つ:赤いブロックの赤い塊の動的認識を見つける

#MicroPython动手做(08)——零基础学MaixPy之识别颜色

#实验程序:find red blob 动态识别红色块

 

import sensor

import image

import lcd

import time

 

lcd.init(freq=15000000)

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.run(1)

red_threshold  = (55, 70, 42, 65, 52, 8) 

while True:

    img=sensor.snapshot()

    blobs = img.find_blobs([green_threshold])

    if blobs:    

        for b in blobs:

            tmp=img.draw_rectangle(b[0:4]) 

            tmp=img.draw_cross(b[5], b[6]) 

            c=img.get_pixel(b[5], b[6])

    lcd.display(img)


ここに写真の説明を挿入
実験用のルービックキューブは5色あります

ここに写真の説明を挿入
実行後、正確に識別できるフレームの円と+記号が表示されます
ここに写真の説明を挿入

曇り空の窓の前の実験シーン
ここに写真の説明を挿入
#MicroPythonハンズオン(08)-色を識別するためのゼロベースの学習MaixPy

#実験プログラム2:緑のブロブを見つけて緑のブロックを動的に識別する

緑のLABしきい値0、88、-42、-6、-9、13を取得します
ここに写真の説明を挿入

#MicroPython动手做(08)——零基础学MaixPy之识别颜色

#实验程序之二:find green blob 动态识别绿色块

 

import sensor

import image

import lcd

import time

 

lcd.init(freq=15000000)

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.run(1)

green_threshold  = (0, 88, -42, -6, -9, 13) 

while True:

    img=sensor.snapshot()

    blobs = img.find_blobs([green_threshold])

    if blobs:    

        for b in blobs:

            tmp=img.draw_rectangle(b[0:4]) 

            tmp=img.draw_cross(b[5], b[6]) 

            c=img.get_pixel(b[5], b[6])

    lcd.display(img)


ここに写真の説明を挿入
#MicroPython手作業で行う(08)-ゼロベースの学習MaixPyの認識色
#Experimentalプログラム3:オレンジ色のブロブを見つけてオレンジ色のブロックを動的に認識する

オレンジ色のLABしきい値0、80、66、-20、80、50(赤との交点)を取得します
ここに写真の説明を挿入

#MicroPython动手做(08)——零基础学MaixPy之识别颜色

#实验程序之三:find orange blob 动态识别橙色块

 

import sensor

import image

import lcd

import time

 

lcd.init(freq=15000000)

 

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.run(1)

 

orange_threshold  = (0, 80, 66, -20, 80, 50)

 

while True:

    img=sensor.snapshot()

    blobs = img.find_blobs([orange_threshold])

    if blobs:

        for b in blobs:

            tmp=img.draw_rectangle(b[0:4])

            tmp=img.draw_cross(b[5], b[6])

            c=img.get_pixel(b[5], b[6])

 

    lcd.display(img)


ここに写真の説明を挿入
青いLABしきい値は0、80、-128、35、-128、-18です。

ここに写真の説明を挿入
黄色のLABしきい値は88、95、0、-44、93、48です。
ここに写真の説明を挿入
注:
この実験ケースは通常のルービックキューブ(曇り光)の色に基づいており、実験データ(LABしきい値)は参照

青(0、80、-128、35、-128、-18)
赤(55、70、42、65、52、8
緑(0、88、-42、-6、-9、13)
オレンジ(0、80、66

ここに写真の説明を挿入
-20、80、50 黄色(88、95、0 -44、93、48 #MicroPythonハンズオン(08)-MaixPyの認識色

#実験手順4:写真の赤と花の部分を特定する

MaixPy IDEを開き、ツールを選択します-マシンビジョン-値エディター-ソース画像の場所-画像ファイル(コンピューター上の画像を識別します)

6つのスライダーの値を慎重に調整します。参照結果は以下のバイナリイメージに示されています

赤と花のハートを識別するためのLABしきい値は(0、80、90、24、75、-10)です。
ここに写真の説明を挿入

#MicroPython动手做(08)——零基础学MaixPy之识别颜色

#实验程序之四:识别图片上的红心和花心部分

 

import sensor

import image

import lcd

import time

 

lcd.init(freq=15000000)

 

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.run(1)

 

Five_threshold  = (0, 80, 90, 24, 75, -10)

 

while True:

    img=sensor.snapshot()

    blobs = img.find_blobs([Five_threshold])

    if blobs:

        for b in blobs:

            tmp=img.draw_rectangle(b[0:4])

            tmp=img.draw_cross(b[5], b[6])

            c=img.get_pixel(b[5], b[6])

 

    lcd.display(img)

ここに写真の説明を挿入
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_41659040/article/details/106601925