引き続き画像を2値化です。
今回はImgproc.adaptiveThreshold()メソッドを使用してみます。
Imgproc.adaptiveThreshold(Mat src, Mat dst, double maxValue,
int adaptiveMethod, int thresholdType, int blockSize, double C)
Mat src 処理したい元画像のMat
Mat dst 変換後Mat
double maxValue 条件を満たすピクセルに割り当てられる値
int adaptiveMethod 適応的閾値アルゴリズムの種類
int thresholdType 閾値処理の種類
int blockSize 閾値を算出するために使用する近傍領域のサイズ
double C 平均または加重平均から引かれる定数
はい、正直意味が分かりません。
この辺の知識経験の無さを実験でカバーするのがこのブログの趣旨なので気にしません。
ちなみに、blockSizeには2で割り切れない整数を利用します。
(偶数だと実行エラーとなります)
thresholdTypeについてはthreshold()のtypeに選択出来る定数の中の「THRESH_BINARY」か「THRESH_BINARY_INV」を選択出来ます。
adaptiveMethodについてはImgprocに以下定数が用意されています。
ADAPTIVE_THRESH_MEAN_C
閾値 T(x,y)は,(x,y)の近傍blockSize x blockSizeの平均からCを引いた値
ADAPTIVE_THRESH_GAUSSIAN_C
閾値 T(x,y)は,(x,y)の近傍blockSize x blockSizeの加重平均からCを引いた値
はい、やっぱり分かりませんね。
で在るが故に、実際にやってみましょう。
Imgproc.adaptiveThreshold(mat, mat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 7, 8);
Imgproc.adaptiveThreshold(mat, mat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 7, 2);
Imgproc.adaptiveThreshold(mat, mat, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 7, 8);
Imgproc.adaptiveThreshold(mat, mat, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 7, 2);
うーん。。あんまり差が分からないですね。
ちなみに版画みたいに見えるのはイソギンのせいです。
版画で画像検索すると似たようなのがたくさんhitして、だんだん版画にしか見えなくなってきました。
0 件のコメント:
コメントを投稿