threshold関数でさまざまなしきい値処理

double threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type );

  • typeで指定された方法によりthresholdでしきい値処理をする

引数

  • src:Mat型の画像。
  • dst:Mat型の出力画像。
  • thresh:double型のしきい値
  • maxval:double型の明度値
  • type:int型のしきい値処理方法。実際はcv::ThresholdTypesを指定する

返り値

  • double型のしきい値

解説

  • doubleのしきい値は、通常パラメータのthreshとして渡した値が返ってくる
    • THRESH_OTSUかTHRESH_TRIANGLEを指定した時だけ、推定されたしきい値が返ってくる
  • typeでさまざまなしきい値処理をできる
    • THRESH_BINARY(0) 通常のしきい値処理
    • THRESH_BINARY_INV(1) 通常のしきい値処理の逆(high→0、low→max_value)
    • THRESH_TRUNC(2) しきい値以上の値をしきい値に丸める
    • THRESH_TOZERO(3) しきい値以下を0にする
    • THRESH_TOZERO_INV(4) しきい値以上の値を0に丸める
    • THRESH_OTSU(8) しきい値をOTSUの方式(判別分析法)で求める
    • THRESH_TRIANGLE(16):TBW。要OpenCV3.0以降
    • THRESH_MASK(7):内部で、使用されるenumで、パラメータとして指定することはできない
  • しきい値より大きいかがポイント.しきい値はlowにカウントされる
  • 画像のタイプはfloat型でも可なので,しきい値もdoubleである
  • THRESH_OTSUかTHRESH_TRIANGLEを指定した場合は、グレースケールシングルチャンネルのみ
  • それ以外の場合は8U、16Sか32F。unsigned char、signed short、floatしかサポートしない

サンプルコード

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

const char filename[]   = "path/to/opencv/samples/data/pic6.png";
const char windowName[] = "Threshold";
const double kThreshold = 100;
const double kHigh      = 255;

int main(int argc, char**argv)
{
	using namespace cv;

	Mat input = imread(filename, IMREAD_GRAYSCALE);
	namedWindow(windowName);
	imshow(windowName, input);
	waitKey(0);

	Mat result;

	// try various thresholding type
	threshold(input, result, kThreshold, kHigh, THRESH_BINARY);     imshow(windowName,result);	waitKey(0);
	threshold(input, result, kThreshold, kHigh, THRESH_BINARY_INV); imshow(windowName,result);	waitKey(0);
	threshold(input, result, kThreshold, kHigh, THRESH_TRUNC);      imshow(windowName,result);	waitKey(0);
	threshold(input, result, kThreshold, kHigh, THRESH_TOZERO);     imshow(windowName,result);	waitKey(0);
	threshold(input, result, kThreshold, kHigh, THRESH_TOZERO_INV); imshow(windowName,result);	waitKey(0);

	double estimatedTh = 0.f;
	// try automatic threshold
	// try OTSU method
	estimatedTh = threshold(input, result, 0, kHigh, THRESH_BINARY+THRESH_OTSU);
	std::cout << "OTSU threshold    :" << estimatedTh << std::endl;	imshow(windowName,result);	waitKey(0);
	// try OTSU method
	estimatedTh = threshold(input, result, 0, kHigh, THRESH_BINARY+THRESH_TRIANGLE);
	std::cout << "TRIANGLE threshold:" << estimatedTh << std::endl;	imshow(windowName,result);	waitKey(0);

	return 0;
}

実行結果

  • 各種しきい値処理の結果
  • 固定しきい値は100でしきい値処理。maxvalは255(白)にした各種結果
    • 通常のしきい値処理(THRESH_BINARY)
      result0000.png
    • 通常のしきい値処理の反転(THRESH_BINARY_INV)
      result0001.png
    • しきい値以上をしきい値に丸め込む(THRESH_TRUNC)
      result0002.png
    • しきい値以下を0にする(THRESH_TOZERO)
      result0003.png
    • しきい値以下を0にする(THRESH_TOZERO_INV)
      result0004.png
    • Otsuの手法(判別分析法)
    • しきい値は85
      result0005.png
    • TRIANGLE
    • しきい値は126
      result0006.png

実体ファイル

  • OpenCV 3.0系列
    • modules/imgproc/include/opencv2/imgproc.hpp
    • modules/imgproc/src/thresh.cpp
  • OpenCV 2.4系列
    • modules/imgproc/include/opencv2/imgproc.hpp
    • modules/imgproc/src/thresh.cpp

ジャンル:OpenCV:OpenCV 2.4:OpenCV 3.0:OpenCV 3.1準拠


添付ファイル: fileresult0006.png 277件 [詳細] fileresult0005.png 226件 [詳細] fileresult0004.png 253件 [詳細] fileresult0003.png 251件 [詳細] fileresult0002.png 236件 [詳細] fileresult0001.png 259件 [詳細] fileresult0000.png 251件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-17 (日) 12:29:03 (677d)