適応的2値化 (adaptive thresholding)

概要

適応的2値化(adaptive thresholding)は,画像を白と黒の2階調に変換する処理である。画像全体で1つのしきい値を使うのではなく,画素ごとにその周辺領域から個別にしきい値を求める。照明のむらがある画像でも,明るい部分と暗い部分の両方で適切に2値化できる。ここでは OpenCV の C++ プログラムを例に,適応的2値化の使い方を示す。

目次

関連する外部ページ

サイト内の関連情報

1. ソースコード

以下は,画像を読み込んでグレースケールに変換し,adaptiveThreshold() 関数で適応的2値化を行う C++ プログラムである。しきい値の決定方法には,近傍領域のガウス分布による重み付き平均を使う ADAPTIVE_THRESH_GAUSSIAN_C を指定している。

#include 

using namespace cv;

int
main(int argc, char **argv)
{
  const char *imagename = argv[1];
  Mat src_img = imread(imagename);
  if(!src_img.data)
    return -1;
  Mat gray_img;
  cvtColor(src_img, gray_img, COLOR_BGR2GRAY);

  Mat adaptive_img;
  adaptiveThreshold(gray_img, adaptive_img, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 8);

  namedWindow("Source", WINDOW_AUTOSIZE);
  namedWindow("Adaptive", WINDOW_AUTOSIZE);
  imshow("Source", src_img);
  imshow("Adaptive", adaptive_img);
  waitKey(0);

  return 0;
}

2. ビルド手順例

以下のコマンドで上記プログラムをビルドする。OpenCV 5 では,必要なインクルードパスとライブラリは pkg-configopencv5 から取得する(pkg-config は,コンパイルに必要なオプションを自動で出力する補助ツールである)。

g++ -o a.out hoge.cc $(pkg-config --cflags --libs opencv5)