LoginSignup
6
3

More than 3 years have passed since last update.

2.3.1 二値化・適応二値化

Last updated at Posted at 2020-11-27

目次へのリンク

MATLABによる画像処理・コンピュータービジョン入門目次

概要

MATLABによる二値化、適応二値化について紹介します。とてもシンプルです。

Image Processing Toolboxが必要ですね。はい。

対応ファイル:I2_03_1_adaptThresholding.m

初期化

Code
clc;clear;close all;imtool close all;

画像の読込み・表示

Code
G = imread('coins.png');
% 可視化
figure; imshow(G);

figure_0_png.jpg

Otsu法により、大局的しきい値により画像を二値化

Code
BW = imbinarize(G);
% 可視化
figure; imshow(BW);

figure_1_png.jpg

穴を埋める

コインの内部が二値化しきれていないので、別途モルフォロジー処理で埋めてしまいます。

Code
BWf = imfill(BW, 'holes');
% 可視化
figure; imshow(BWf);

figure_2_png.jpg

適応二値化

次に適応二値化についてみていきます。先ほどの方法は、画像全体に同じしきい値を適用して、二値化していきました。それに対してこちらは、画像の場所によってしきい値を適応的に変えて二値化するものです。背景の明るさにばらつきがある場合に効果を発揮します。

Code
G = imread('printedtext.png');
% 可視化
figure; imshow(G);

figure_3_png.jpg

ご覧の通り明るさにかなり違いがあります。

輝度の局所平均を用い、画素単位で適応しきい値計算

Code
T = adaptthresh(G, 0.4, 'ForegroundPolarity','dark');  % 黒い部分が前景
figure; imshow(T);  % しきい値の可視化

figure_4_png.jpg

Code
%% 算出したしきい値で、画像を二値化・表示
BW = imbinarize(G, T);
imshow([G; BW*256]); truesize; shg;     % 原画像を結果を、縦に並べて表示

figure_5_png.jpg

画像の場所によらずきちんと二値化できていますね。他の例も見てみます。

Code
% 別の画像の読込み・表示
G = imread('rice.png');
figure; imshow(G);

figure_6_png.jpg

Code
% 画像を適応二値化・表示
BW = imbinarize(G, 'adaptive', 'sensitivity',0.4);
figure; imshowpair(G, BW, 'montage');

figure_7_png.jpg

こちらもきちんとできていますね。場所によってしきい値を変えるので、結果画像がパッチ上に不連続になってしまう場合もあります。適宜使い分けることが重要かと思います。

謝辞

本記事は @eigs さんのlivescript2markdownを使わせていただいてます。

目次へのリンク

MATLABによる画像処理・コンピュータービジョン入門目次

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3