目次
画像のしきい値(しきい値)
しきい値は制限を意味し、しきい値は制限値です。
といった
- 直径が7cmを超えるリンゴの山は適格と見なされ、7cm未満は不適格と見なされます。
- テストスコア、60を超えるスコアは合格と見なされ、60未満のスコアは不合格と見なされます
上記の分類により、すべての変数を2つのカテゴリに分類し、分類基準、つまり制限がしきい値になります。
しきい値は何ですか
(1)しきい値バイナリ。
(2)しきい値バイナリ反転
(3)切り捨て(切り捨て)
(4)ゼロへのしきい値
(5)ゼロへのしきい値が反転
しきい値の2値化
しきい値の2値化は、すべてのケースをしきい値によって2つのケースに分割することです。
1.しきい値より大きい場合は、最大値を取ります。
2.しきい値が0以下です。
左の画像で2値化演算を実行すると、青い線より上のすべての線が最大値になり、青い線より下の線がすべて0になります。これが右の画像です。
しきい値の非二値化
しきい値の非二値化も、すべてのケースをしきい値によって2つのケースに分割しますが、二値化の反対です。
1.しきい値より大きい場合は、0を取ります。
2.しきい値以下の最大値を取ります。
左の写真では、非二値化操作を実行すると、青い線の下のすべての線が最大値になり、青い線の上の線はすべて0になります。つまり、右の写真のようになります。
切り捨てられました
切り詰めは文字通りの意味から比較的簡単に理解できます。花や植物を作っている庭師のことを考えることができます。美しさのために、すべての木は同じ高さに切り取られます。つまり、しきい値よりも大きい木は切り詰められます。除去される:
1.しきい値よりも大きい場合は、しきい値を取得します。
2.しきい値以下の元の値を取得します。
式で表すと次の式になります。
左の写真で切り捨て演算を行うと右の写真のようになります。
しきい値はゼロです
しきい値ゼロは制限を設定することと同じです。誰もが競争を考慮します。競争が進んだ場合、結果は有効であり、競争は継続します。結果が基準に達していない場合、それは損失と見なされ、結果はゼロになります。つまり、しきい値を下回る値はゼロになります。
1.しきい値よりも大きい場合は、元の値を使用します。
2.しきい値が0以下です。
左の画像では、しきい値がゼロになった後に右の画像を取得します
しきい値がゼロに逆になります
しきい値はゼロに反転され、しきい値はゼロになります。つまり、しきい値より大きい値はゼロになります。
1.しきい値より大きい場合は、0を取ります。
2.しきい値以下の元の値を取得します。
式で表すと、次の式になります。
左の図では、右の図のように、しきい値がゼロに反転され、上のしきい値が0に設定されています。
総括する
しきい値を見つける方法、opencvは2つの方法を提供します
- THERSH_OTSU 和 THERSH_OTSU
API
double threshold(
InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
);
(1)InputArrayタイプ、入力画像、マルチチャネル、8ビットまたは32ビット浮動小数点のsrc。
(2)OutputArrayタイプのdst、出力画像、画像のサイズ、タイプ、およびチャネル数は、入力画像と同じです。
(3)ダブルタイプのスレッシュ、スレッショルド。
(4)ダブルタイプmaxval、THRESH_BINARYおよびTHRESH_BINARY_INVしきい値タイプを使用する場合の最大値。
(5)intタイプのタイプ、しきい値タイプ、値については、cv :: ThresholdTypesを参照してください。
コード表示
スライダーを組み合わせてコードを書く
トラックバーを調整してしきい値を制御し、しきい値タイプの切り替えを実現します
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
//全局变量
Mat src, dst;
int thresholdValue = 127;
int thresholdMax = 255;
int typeValue = 2;
int typeMax = 4;
const char* output_title = "binary img";//窗口名称“二值化图像”
void Threshold_Demo(int, void*);//二值化演示函数
//主函数入口
int main()
{
src = imread("C:/Users/86176/Pictures/pics/lena(1).tiff");
if (!src.data)
{
cout << "could not load image..." << endl;
return -1;
}
imshow("show image", src);
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
createTrackbar("Threshold Value", output_title, &thresholdValue, thresholdMax, Threshold_Demo);//动态调整
createTrackbar("Type Value", output_title, &typeValue, typeMax, Threshold_Demo);
Threshold_Demo(0, 0);
imshow(output_title, dst);
waitKey(0);
return 0;
}
void Threshold_Demo(int, void*)
{
threshold(src, dst, thresholdValue, thresholdMax, typeValue);
imshow(output_title, dst);
}
効果
Opencvの基本的なしきい値操作
総括する
thresholdType = 0
しきい値の2値化
- しきい値は0に設定され、すべての偶数ピクセルは0より大きく、最大値は255で、これは白です。
- しきい値は255に設定され、すべてのピクセルは255未満、すべては0、つまり黒です。
thresholdType = 1
しきい値の非バイナリ化
- しきい値は0に設定され、すべての偶数ピクセルは0より大きく、最小値は0で、これは黒です。
- しきい値は255に設定され、すべてのピクセルは255未満であり、最大値は255で、これは白です。
thresholdType = 2
切り捨て
- しきい値は0に設定され、すべての偶数ピクセルは0より大きく、しきい値は0で、黒です。
- しきい値は255に設定され、すべてのピクセルは255以下であり、すべて元の値を取り、画像は変更されません。
thresholdType = 3
しきい値は0です
- しきい値は0に設定され、すべての偶数ピクセルは0より大きく、すべて元の値を取り、画像は変更されません。
- しきい値は255に設定され、すべてのピクセルは255以下、すべて0、画像は黒です。
thresholdType = 4
しきい値が0に逆になります
- しきい値は0に設定され、すべての偶数ピクセルは0より大きく、すべて0に設定され、画像は黒になります。
- しきい値は255に設定され、すべてのピクセルは255以下であり、すべて元の値を取り、画像は変更されません。
基本的なしきい値操作は、画像の脱水に使用できます