画像処理では、白黒画像を扱うのが、1番ラクになります。
白黒画像を作る方法が「2値化(にちか)」になります。
多くの画像処理で、2値化が使われています。
また、2値化や2値画像の画像処理を学んでおくと、
- 画像処理の基礎を理解できる
- 画像処理の応用事項の理解も加速させれる
というメリットがあります。
そこで、本記事では、画像処理の基本を学びたいという方から、
- 2値化ってなに?
- 2値化の主な手法って、どんなものがあるの?
- 2値化ってどう役に立つの?
といったあなたのために、
画像処理の基本である「2値化」に関連する基礎知識をわかりやすく説明しました。
本記事の概要
- 1 【画像処理の技術】「2値化(にちか binarization)」とは?2値画像の生成方法などを学びたいあなたはこちらをどうぞ
- 1.1 画像処理の2値化は、どんな応用がされているの
- 1.2 なぜ、画像処理の2値化が必要なの?
- 1.3 グレースケール画像とは
- 1.4 2値画像とは
- 1.5 画像処理の階調数とは
- 1.6 画像処理におけるヒストグラム(histogram)とは
- 1.7 2値化のやり方とは
- 1.8 判別分析とは
- 1.9 画像処理 1番最初の入門書
- 1.10 ディジタル画像処理改訂新版
- 1.11 コンピュータ画像処理
- 1.12 画像処理エンジニア検定エキスパート・ベーシック公式問題集改訂第三版
- 1.13 詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識
- 1.14 新編 画像解析ハンドブック
- 1.15 Python量子プログラミング入門
- 1.16 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 1.17 ゼロから作るDeep Learning ❷ ―自然言語処理編
- 1.18 四色問題 (新潮文庫)
- 1.19 Pythonで理解する統計解析の基礎 (PYTHON×MATH SERIES)
- 1.20 図解 人工知能大全 AIの基本と重要事項がまとめて全部わかる
【画像処理の技術】「2値化(にちか binarization)」とは?2値画像の生成方法などを学びたいあなたはこちらをどうぞ
画像処理の2値化は、どんな応用がされているの
具体的な例ですと、
- ファックスで文字を送信するとき
- 文字読み取り装置(OCR)による「文字認識」
をする際に使われるアルゴリズムの1つとして活用されています。
加えて、上で述べたように、画像処理全般の前処理として応用されています。。
なぜ、画像処理の2値化が必要なの?
例えば、旅行に行ったりしたら、風景から、旅行の思い出など、
綺麗なカラー画像を残したいですよね。
しかし画像処理の観点からいうと、カラー画像はやっかいなんです。
色の情報があるため、情報量(データ)が多い画像となり、
その分、処理が大変になるからです。
画像処理は何らかの目的を持って行われますが、その処理には、
色の情報が必要ない場合もたくさんあります。
(例えば、画像の顔写真の輪郭だけほしい場合は、白黒画像でも十分なんです)
そういった場合には、カラー画像は、色をなくすことで
- 計算コストを減らし、扱いやすくする
ことができます。
カラー画像の色をなくした画像を「グレースケール画像」と呼びます。
さらに、グレースケール画像は、白と黒だけの「白黒画像」にすることで、
さらに扱いやすくすることができます。
なので、画像処理の全般で、色が関係ない場合には、
- カラー画像を処理して白黒画像にする
- そして画像処理する
という流れで処理することがあります。
画像処理の多くの応用では、2値画像に対して処理を行うことで、
計算コストを削減しながら、目的を達成することができるわけです。
つまり、画像処理をする際に、2値化は必須の技術だとわかってもらえるかと思います。
ここからは、さらに詳しく説明していきたいと思います。
2値化について理解するためは、
まずは、グレースケール画像について理解しておく必要があります。
(もしわかってるって方は、サーッと下に行ってくださると幸いです)
グレースケール画像とは
カラー画像は様々な色の情報を持っていますが、
カラー画像から色の情報を除いたものを「グレースケール画像」です。
グレースケール画像は、白から黒までの様々な濃淡の灰色を使って表現された画像になります。
これは画像処理的には、以下の言い方ができます。
グレースケール画像の各画素は、
白黒の度合いを表した「階調値(かいちょうち)」という情報を持っています。
(階調は、量子レベルとも呼ばれます)
この階調値は、白から黒の間の濃さを表現した離散量になります。
また、階調値は、コンピュータの中では2進数や符号数(コード)で表現されています。
つまり、グレースケール画像は、
- 各画素の白黒の度合いをコンピュータに蓄えた情報の集まり
いうことになります。
ちなみに、階調値はどこからくるの?ってことですが、
階調値は、連続量である濃度値(階級値、輝度値)を量子化して得られます。
その辺のことは、以下の記事で解説していますので、よかったらどうぞ↓
『画像処理とは?画像処理に入門したいあなたのための基本事項や基礎知識はこちらです』
2値画像とは
濃さが数段階ある状態を、2段階(白・黒)のみにしてしまうのが「2値化」になります。
また、濃さが白か黒かのどちらかだけ、になった画像を「2値画像」と呼びます。
つまり、
- 2値画像では、各画素は0か1(白か黒)の情報を持っている画像
ということになります。
グレースケール画像では、白黒の濃さを、階調値でデータ化していましたが、
白黒画像では、白と黒の間の階調値はなく、
白か黒かの2つの階調値(2値)だけを持っている画像です。
なので、白黒画像は、グレースケール画像よりも、データ量が少なくなり、
画像処理として扱いやすくなります。
では次に、2値化のやり方について説明しますね。
2値化の方法を理解するには、
まず「階調数」とその「ヒストグラム」を理解する必要があります。
まずは、それらを説明します。
画像処理の階調数とは
階調数とは、上で少し触れたのですが、
各画素上の明るさの度合いを表現するための目盛りのことです。
白黒の濃淡の度合いの目盛りともいえます。
明るさの度合いの情報はコンピュータの中で、以下のように表現されます。
- 階調数に1ビット使う場合:(2の1乗で)2段階で表現
- 階調数に2ビット使う場合:(2の2乗で)4段階で表現
- ・・・
- 階調数に8ビット使う場合:(2の8乗で)256段階で表現
- ・・・
のような感じになります。
階調数を多くとれば、表現できる目盛りが増える分、明るさを精密に表現できる反面、
コンピュータ上の記憶容量は多く使ってしまうことになります。
なので、目的に応じて、適切な階調数を使うのが現実的となるわけです。
また、各画素はそれぞれ「階調値」を持っています。
階調値は、その画素がどの濃さかという、画素の持つ実際の値のことになります。
階調数は、白から黒までの濃さを表すための目盛りのことで、
0から255段階といった階調数がよく使われます。
使い方としては、この「画像(がぞう)」は、階調数を256段階で表現していて、
そのうちこの「画素(がそ)」は、階調値は(256段階のうちの)3である
のような表現ができます。
似ているのですが、区別して理解しておくと、後の理解がスムーズかと思います。
画像処理におけるヒストグラム(histogram)とは
階調値を使うことで、画像の性質を知ることができます。
その方法の1つに、「ヒストグラム」があります。
ヒストグラムについては、統計学のお話になりますので、以下を参考にしていただけたらと思います。
統計学ってどんなんだっけ?という方は、以下の記事をどうぞ↓
『「統計学」に入門したい人はチェックしてほしい良書、10冊はこちらです』
一般に、画像処理におけるヒストグラムでは、
横軸に画素値を、縦軸に画素値の頻度をとり、
この情報をグラフにしたものがヒストグラムになります。
例えば、グレースケール画像の場合には、
画素値には白黒の濃淡を表した階調値が使われます。
階調数が8ビット(256通り)とすると、
0から255までの中で、それぞれの階調値を持つ画素の頻度をそれぞれ数えていきます。
これを並べてヒストグラムを作るわけです。
具体的には、
- 0の階調値を持つ画素は、〜個
- 1の階調値を持つ画素は、〜個
- ・・・・
- 255の階調値を持つ画素は、〜個
のように数え上げて、その情報をグラフにします。
グレースケール画像のヒストグラムを作ってみると、
そのの多くは、2つの山がある形になります(2峰性と呼んだりします)。
そして、この2つ山がある性質をうまく使って、2値化が行われます。
2値化のやり方とは
2値化とは、それぞれの画素の階調値を、0か1のどちらかに変換することです。
つまり、ヒストグラムの横軸の階調数をどこかで2つに分けて、
- それより小さい階調数の画素は0にする
- それ以上の階調数の画素は1にする
のように、分割するのが2値化の操作のポイントです。
これは、2つの山のある分布を2つに分ける、という問題で、
うまい方法があります。
その1つが「判別分析(はんべつぶんせき)法」です。
判別分析を使うと、2値化は、以下の手順で行うことができます。
2値化のやり方
(1), 階調値のヒストグラムを、判別分析を使って、2つのグループに分ける
(2), それぞれのグループの階調値を、それぞれ0、1にする
これで、白黒のみの2値画像を作ることができます。
とてもシンプルですよね。
ちなみに、他にも2つの山を分割する方法があります。
例えば、p−タイル法や、モード法、といった方法です。
ただし、これらはいずれもヒストグラムに対する事前の知識が必要であったり、
ノイズなの影響で分離点を1意に決めるのが難しかったりと、デメリットがあります。
最後に判別分析について補足したいと思います。
判別分析とは
判別分析とは、例えば、多数の山を持つ1つのヒストグラムについて、
いくつかの既知の分布に分離する、という問題などで使われるアルゴリズムの1つです。
判別分析の際には、既知の分布には正規分布が使われます。
統計モデリングや機械学習の中でよく使われます。
考え方としては、それぞれの既知の分布の分離が最大になるように閾値(しきいち)を決める、という方針になっています。
そして、分離の度合いを表す量として「分離度(ぶんりど)」を使います。
分離度は、クラス内分散とクラス間分散の比で定義されています。
全分散は、クラス内分散とクラス間分散の和で一定なので、
クラス間分散が最大になるように閾値を決めることができる、という仕組みになっています。
判別分析では、ヒストグラムから一意に閾値を決定できるので、よく使われています。
今回は、2値画像を生成するために、グレースケール画像の階調度のヒストグラムに判別分析を適用した、というわけです。
判別分析については、こちらの記事もございます。よかったらどうぞ↓
『「判別分析」を学びたいあなたにチェックしてほしい良書、10冊+α はこちらです』
ちなみにですが、一般に、多数の山を持つヒストグラムが、
正規分布の重ね合わせで表現できなさそうな場合には、判別分析は向いていません。
判別分析では、正規分布を使って処理をする方法だからです。
正規分布が使えなさそうな場合には、ロジスティック回帰などの手法で2値に分ける方法があります。
ご興味がある方は以下の記事もございます↓
『「ロジスティック回帰分析」とは?分析例やオッズ比、重回帰分析との違いなどをサクッと理解したいあなたはこちらをどうぞ』
というわけで、本記事では、
- 2値化ってなに?
- 2値化の主な手法って、どんなものがあるの?
- 2値化ってどう役に立つの?
といった点について、わかりやすく説明しました。
こちらの記事もございます
こちらもございます↓
画像処理 1番最初の入門書
本書は、画像処理を学んでみたい
- 画像処理の初学者の方
- 入門書を読んだけど難しかった方
- 画像処理で挫折した方
向けに、
- 画像データの感覚
- 画像データの扱い方のイメージ
をつかむことで、
入門書を読み解ける基礎力をつけれるようになる1冊です。
ちなみに本書は、Kindle Unlimitedの登録することで、
- 無料で読むことが可能
です。
お試し登録(解約できて無料)をしてみてはいかがでしょうか(初回30日間無料で体験できます)↓
ディジタル画像処理改訂新版
コンピュータ画像処理
画像処理エンジニア検定エキスパート・ベーシック公式問題集改訂第三版
詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識
新編 画像解析ハンドブック
Python量子プログラミング入門
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロから作るDeep Learning ❷ ―自然言語処理編
四色問題 (新潮文庫)
Pythonで理解する統計解析の基礎 (PYTHON×MATH SERIES)
図解 人工知能大全 AIの基本と重要事項がまとめて全部わかる
こちらもどうぞ↓
『「機械学習」に入門したいあなたにチェックしてほしい良書、10冊はこちらです』