【Python】OpenCVでの画像の勾配 – Sobel(), Laplacian()

Pythonの応用
スポンサーリンク

初心者の独学でのプログラミング学習はとてもツライ…

プログラミングをマスターしたい!

今のIT業界はプログラミングエンジニアが不足していると言われています。
高収入の職業とも言われる分野もありますし、AI、機械学習、ディープラーニング、IOTといった注目される分野が目白押しです。

でも、いざ初心者がプログラミングをマスターしようとすると…

  • 本を読んだりネットの記事で自力で勉強しているけど限界を感じる
  • プログラミングスクールに定期的に通うのは面倒だ
  • 地方に住んでると家の近くにプログラミングスクールなんてない
  • どのプログラミング言語を学べばいいのか悩む
  • 実際の就職や転職にプログラミングが活かせるのか心配だ

など、プログラミングを自分で勉強しようとすると悩みが尽きません。

プログラミングに詳しい友人に教えてもらおうと思っても、そんな友人なんて滅多にいません。いたとしても細かく教えてくれるほど時間に余裕がある人はいないでしょう。

そんな独学でプログラミングをマスターするのに限界を感じてる方に、オンラインプログラミングスクールをがおすすめです。

おすすめのオンラインスクールはこちら

OpenCVを使ったPythonでの画像処理について、ここでは画像の勾配を検出する方法を見ていきます。

画像の勾配とは濃度勾配とも言われ、各画素の値の変化の度合を示します。これは画素の位置を変数とした場合の微分値であると言われますが、ここではその数学的な厳密な意味には触れませんが、エッジのような個所を表す画像と見なしてオブジェクトの検出や認識、輪郭追跡の前処理などに利用されます。

ここでは、cv2.Sobel()、cv2.Laplacian()などを見ていきましょう。

スポンサーリンク

勾配検出フィルタ- cv2.Sobel()、cv2.Laplacian()

いつものように各種ライブラリをインポートします。jupyter notebookを使って見ていきます。

ここは、お決まりのライブラリのインポートです。

画像を読み込みます。

imagesフォルダにstairs.jpgを用意して、これをimread()で読み込んでいます。0を指定してグレースケールで読み込みます。

読み込んだ画像を表示する関数を定義してみます。

figure()でアスペクト比を指定し、add_subplot()で111を指定して画像を左上の端を基準に表示します。

画像を表示してみます。

この画像を基準に勾配処理をしていきます。

次のように処理してみます。

cv2.Sobel()、cv2.Laplacian()をそれぞれ処理しています。以下で見ていきましょう。

Sobel()

Sobel()関数はノイズ耐性がある処理です。上の処理の第2引数のcv2.CV_64Fは画素の型の種類を与えています。ここでは64ビットの倍精度実数浮動小数点数です。

勾配を計算する方向は、引数yorderとxorderで指定します。第3引数(yorder)を1にするとx方向の勾配、第4引数(xorder)を1にするとy方向の勾配を計算します。第5引数(ksize)に勾配を計算するカーネルのサイズを指定できます。ここでは5を指定しています。

それぞれ表示するとこうなります。

第3引数を1にした場合。

第4引数を1にした場合。

Laplacian()

Laplacian()関数は、Sobel()を使って計算されるx、yに関する2次微分を足し合わせることで処理すると数学的には説明されますが、細かい意味合いには立ち入りません。

上で処理をした結果だけ見ておきましょう。

表示するとこうなります。

スポンサーリンク

処理を組み合わせる

これまで、別のところでも色々な処理を見て来ました。ここで、これらの処理を組み合わせて使ってみることにしましょう。

画像を合成する

ここまで扱ったことと、addWeighted()を使って合成してみます。

addWeighted()についてはこちらを参照してください。

【Python】OpenCVで画像を合成する - addWeighted, bitwise演算, ROI
Pythonに画像処理ライブラリのOpenCVを使って、2つの画像を合成したり重ねたりする方法を見ていきたいと思います。addWeighted()での合成や、関心領域(ROI)とbitwise演算を使った合成の方法を見ていきます。

このように合成するコードを書いてみました。

addWeighted()を使って、上で求めたsobelxとsobelyを合成しています。

モルフォロジー勾配

次はモルフォロジー勾配と組み合わせてみます。

モルフォロジー勾配の処理についてはこちらを参照してください。

【Python】OpenCVのモルフォロジー変換 - erode(), dilate(), morphologyEx()
OpenCVを使ったPythonでの画像処理について、膨張処理、収縮処理のモルフォロジー変換を扱います。白黒画像のような二値画像を対象に簡単な処理を行います。erode()、dilate()、morphologyEx()を使ってみましょう。

morphologyEX()で上の合成で作ったblendedを処理してみます。

カーネルを4×4にして、cv2.MORPH_GRADIENTでモルフォロジー勾配処理を行います。

2値化 – 閾値処理

今度は画像の2値化処理を組み合わせてみます。

2値化、閾値処理についてははこちらを参照してください。

【Python】OpenCVで画像の2値化 - 閾値処理 threshold()
OpenCVを利用したPythonでの画像の2値化処理を見ていきます。2値化処理によって画像の特徴的な部分を取り出すことができますが、そのためには最適な閾値処理が必要です。閾値処理には単純な閾値処理と適応的閾値処理があります。

threshold()を使って色々と処理してみましょう。

ここでは処理する画像にimgを使ってみます。閾値をここでは100を指定してみます。2値化の最大値を255として、THRESH_BINARYで処理してみます。

次は、上で処理した画像のgradientを使ってやってみましょう。

閾値をここでは200にして、THRESH_BINARY_INVで処理してみます。

今度は、上で処理したblendedを使ってみます。

閾値を100に設定し、THRESH_BINARY_INVで処理してみます。

以上、画像の勾配を色々な処理と組み合わせてみました。

スポンサーリンク

最後に

ここではOpenCVを使ったPythonでの画像処理について、画像の勾配を検出して処理する方法を扱いました。

画像の勾配とは濃度勾配とも言われ、エッジのような個所を表す画像と見なしてオブジェクトの検出や認識、輪郭追跡の前処理などに利用されます。

数学的な細かい処理はすっ飛ばして動きだけを扱いました。細かい数学的意味などは検索などで確認してください。(初心者にとっては、ここで説明があるとややこしいだけですよね)

ここでは、cv2.Sobel()、cv2.Laplacian()の処理と、以前に行った処理との組み合わせを見てきました。

ここで扱った処理は、数字の画像認識などにも繋がる処理ですので覚えておきましょう。

自宅学習はオンラインプログラミングスクールを活用!

自宅学習にはオンラインプログラミングスクールがおすすめ!

オンラインプログラミングスクールは独学でプログラミングを学習する時のデメリットを解消する仕組みが備わっています。

気になるところは…

学習がオンラインで完結するのはもちろんですが、独学ではできない質問サポートがあるかどうか。わからないことを現役のエンジニアが質問に答えてくれるといいですよね。

受講者個人に担当のメンターがつき、マンツーマンで学習の相談に乗ってくれることも必要で、ITエンジニアの世界についても伺えたりもすると幅が広がります。

オンライン面談だけでなく、チャット機能を使って気軽に質問を投げかけることができることも大切です。

また、オリジナルプロダクトの開発とサポートがコースの中に組み込まれていて、独学ではなかなか難しい実践的なスキルの習得にもつなげたい。

プログラミングをマスターした後の実際の仕事につながる転職サポートでがあると、ITエンジニアの世界に飛び込むのに不安が解消されます。

そんな豊富なメニューが揃っているおすすめのオンラインプログラミングスクールがこちらにあります。

おすすめのオンラインプログラミングスクールはこちら

TechAcademyはおすすめのオンラインプログラミングスクール!

オンラインのプログラミングスクールでは、テックアカデミーの充実度が目を見張ります。

オンラインで受講が完結するので、自宅学習でプログラミングをマスターしたい人にはテックアカデミーがおすすめです。

メンター制度も現役のプロが対応してくれます。大学生などが対応しているスクールに比べて本気度と専門性が違います。メンター制度の無いスクールもありますし、担当では無いメンターが対応するスクールもあったりするので、相談の質が違いますね。

チャットサポートもあるので、それが無いスクールに比べて相談の気軽さの違いがあります。

プロダクト開発のサポートで実践力が養われるだけでなく、どの講座を利用しても転職サポートが受けられるのはありがたい。

用意されているコースも、初心者向けのプログラミングコースから、Python、Java、PHP、iPhoneアプリ、AndroidといったITエンジニアのベースとなる主要な言語だけでなく、AI、データサイエンス、ブロックチェーン、webアプリケーションと行った実践的なコースまで用意しています。

他にも、webデザインやUI/UXデザイン、動画編集、webディレクションやwebマーケティングといったプログラミング以外での役立つコースまであります。

このようなたくさんの選択肢から自分にあったコースを選ぶことがでるのがテックアカデミーです。

コースの期間も短期間でマスターしたり、長期の受講でじっくり取り組むコースを選ぶこともできます。

複数講座のセットコースを利用することで大幅な割引が受けらるので、お得に受講することもできます。

無料体験もありますので、プログラミング学習でオンラインスクールを考えている人はTechAcademyをぜひ利用してみてください。

テックアカデミーの公式サイトはこちら

タイトルとURLをコピーしました