MATLABで画像処理その2:画像をグレースケールに変換して2値化してみる

投稿日:2022年8月27日
最終更新日:2022年8月27日

MATLABで恐竜君を抽出してみる

前回は画像処理を行う前に基本的な画像の操作について書いたが、今回はいよいよ画像処理っぽいことをやってみる。目標なくやっていてもダレるので、しばらくは以下の写真を二値化して恐竜君だけを良い感じに抽出することを目標に色々やってみる。

今回はベタに(?)、まず画像をグレースケールに変換して白黒の2値化画像にする処理をMATLABのImage Processing Toolboxの機能を使ってやってみたい。

 

開発環境

MATLAB online

MATLAB R2022a

Image Processing Toolbox

 

画像をリサイズする

その前に、前回MATLAB Driveにアップロードした写真はサイズが大きめでちょっと扱いづらいので、画像をリサイズしてから処理することにする。まずは前回やったように画像ファイルdinosaur.jpgを行列Aとして読み込む。

A = imread('dinosaur.jpg');

画像をリサイズするにはimresizeを使えばOK。以下のコマンドを実行すると画像データを入れた行列Aを0.5倍にリサイズしてAsmallという行列として定義している。

Asmall = imresize(A, 0.5);

imresizeのオプションなどは以下を参照。

https://jp.mathworks.com/help/matlab/ref/imresize.html

 

画像のグレースケール化

RGBの画像をグレースケールに変換する場合はrgb2grayを使う。以下のコマンドでは先ほどリサイズしたAsmallという画像をグレースケールのGという画像に変換している。

G = rgb2gray(Asmall);

imtool(G)を実行してGを表示して見ると、以下のようにグレースケールに変換できていることがわかる。

rgb2grayのオプションなどは以下を参照。

https://jp.mathworks.com/help/matlab/ref/rgb2gray.html

 

画像の2値化

一口に2値化といっても色々やり方はあるが、まずはMATLABのimbinarizeというコマンドでお手軽にやってみる。methodというオプションをつけることで二値化の方法をglobalとadaptiveで選べるが、何もオプションをつけないとglobalがデフォルトで選択される。

※ちなみに同じような2値化のコマンドとしてim2bwというものもあるが、こちらは現在推奨されていないと公式ドキュメントに書いてあった

BW = imbinarize(G)

こちらが2値化した画像。うーむ、恐竜を抽出するという目的からすると尻尾の周りが消えちゃってるし、ちょっと微妙な感じ。

試しに以下のコマンドでAdaptiveのmethodを選択して試してみた。

BW = imbinarize(G, 'adaptive');

その結果が以下の画像。抽出という意味ではさっきよりは良いかな?

imbinarizeのオプションなどは以下を参照。

https://jp.mathworks.com/help/images/ref/imbinarize.html

ここで恐竜の周りにポツポツ残っている点を消すためにbwareaopenというコマンドを使う。bawareopen以下で150pixel以下の連結したバイナリを削除してみた。

BW2 = bwareaopen(BW, 150);

以下が実行してみた画像。上の方の机の縁のデカい領域は残っている&ところどころ恐竜が消えかかってはいるものの、一応恐竜は抽出できてる感じになった。

bwareaopenのオプションなどは以下を参照。連結要素の定義なども変えられるので、かなり便利。

https://jp.mathworks.com/help/images/ref/bwareaopen.html

ここでふと思ったのだが、恐竜はRGBのG(グリーン)の要素が強そうなので、これをうまく使えばより上手に抽出できそう。ということで、次回は画像をRGB要素ごとに分離して、手動で閾値を設定して二値化してみたいと思う。

 

参考文献

2.1.3 静止画 画像処理・解析のワークフロー – Qiita

以下の本も適宜参照してます。

Interface 2022年 9月号

 

MATLAB/Simulink記事まとめ

MATLABとSimulinkの記事は以下にまとめてます。

MATLAB/Simulinkで遊んでみる まとめ

 


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください