OpenCVSharp4で内外判定
内外判定とは
点が「領域の内側にあるか外側にあるか」判定すること
Cv2.PointPolygoonTest()
を使うと判定できる。オプションで領域との距離を測定することもできる。
プログラム
OpenCVSharp4の導入はコチラ
結果
パプリカの断面のようである。
参考
https://docs.opencv.org/4.0.0/dc/d48/tutorial_point_polygon_test.html
OpenCVSharp4で多角形凸包してみた
はじめに
多角形凸包とは、ある領域を「ヘコみのない多角形」で囲むことである。
方法
- 画像を読み込む
- 輪郭を求める
- 輪郭の点の集合を集める
- 集めた点で凸包する
- 表示
プログラム
ほとんどmotchy様のプログラムを参考にしたが、現バージョンに合わせて書き換えた。
結果
参考
https://motchy99.blog.fc2.com/blog-entry-153.html
https://teratail.com/questions/222754
https://docs.opencv.org/4.0.0/d7/d1d/tutorial_hull.html
https://ja.wikipedia.org/wiki/%E5%87%B8%E5%8C%85
https://white-rabbit.jp/quickhull/
Huモーメントについて
Huモーメント(Hu moments)とは
平行移動、回転移動、拡大縮小、鏡映しても値が変わらない「モーメント不変量」のひとつ。(ただし、鏡映したときはの符号が反転する)
Huモーメントは7つのパラメータをもつ。
平行移動、回転移動、拡大縮小、鏡映しても値が変わらない特徴から、
データ間の類似度を測るのに用いられる。
Huモーメントの定義
相当に汚い式。おそらく覚える必要はない。
Huモーメントの問題点
- 独立でない
単純なノルム(等)では正確に比較できない - 解像度により値が変わること
これは拡大縮小の際に考慮すべきである
参考
https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#humoments
https://youtu.be/uEVrJrJfa0s
画像のモーメントってなんだよと思ったので
定義
画像のモーメントには
- 素モーメント(raw moment)
- 中心モーメント(central moment)
の2種類がある。素モーメントは画像基準の座標系、中心モーメントは重心を原点とした座標系である。
素モーメント(raw moment)の定義
の画像に対して画像の素モーメントはで与えられる。
素モーメントの性質
かつ画像が二値画像のとき、となり、画像の面積を表す。
(画像が密度のときはは質量を表す)
また、を使って重心の座標を表すことができる。(重心が素モーメントで表せる簡単な説明はコチラ)
中心モーメント(central moment)の定義
の画像に対して画像の中心モーメントはで与えられる。ここで、は前述の通り重心の座標である。
中心モーメントの性質
定義より明らかだが、
- は共分散である。
- は断面二次モーメントである。
- はそれぞれの分散である。
- はとの相関係数である。
- 画像を平行移動してもは変わらない。
参考
https://en.wikipedia.org/wiki/Image_moment
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html
http://www.wakariyasui.sakura.ne.jp/p/mech/gou/jyuusinn.html
OpenCVSharp4で画像に等高線を描く
ゲームをやっていたら等高線を書きたくなったので。。。
方法
- 画像の正規化
- 画像の階調を粗くする
- 階調を荒くした画像でエッジ検出
- 階調を荒くした画像にエッジを上描き
- 等高線画像の表示
プログラム
結果
入力画像
出力画像
OpenCVSharp4で輪郭検出
輪郭検出とは
cannyなどで検出したエッジから、輪郭(ループ)を取り出すこと。
OpenCVのCv2.FindContours()
では輪郭同士の包含関係も取り出せる
プログラム
参考
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_contours/py_contours_hierarchy/py_contours_hierarchy.html
https://docs.opencv.org/4.0.0/df/d0d/tutorial_find_contours.html