バネマスダンパ系のPIDシミュレーション

はじめに 前回記事のプログラムを改良してPIDシミュレーションしてみた negizoku.hatenablog.jp この方程式をちょっと改造してPID制御を組み込む 時間微分すると変位になる変数を定義する 運動方程式の中にを組み込むと、次のような常微分方程式となる ここ…

SciPyを使ってバネマスダンパ系のシミュレーションをやってみる

理論 scipy.integrate.odeintでは常微分方程式を解くことができる。 バネマスダンパ系の運動方程式をの形に書き換えれば解を得られる。 バネマスダンパ系の運動方程式は次の通り。ここでは外力 ここで両辺をで割る。 であることを考慮すれば、現代制御でおな…

読書記録「スポーツ・ルール学への序章」

説明 表紙 「野球はなぜ9人で行うのか」 「ラグビーのゴールはなぜ11人なのか」 「テニスの得点はなぜ0, 15, 30, 40, 60なのか」 といった誰もが抱く疑問の答えを探求するのが「スポーツ・ルール学」である。 本書ではまず「日本人の公認ルール神聖視」や「…

OpenCVSharp4で細線化

いろいろプログラムを組もうとしたが、やっぱりライブラリには勝てなかったよ... using OpenCvSharp; using OpenCvSharp.XImgProc; namespace thinning { class Program { static void Main(string[] args) { Mat src = new Mat(@"D:\OpenCV\curves0.png", I…

OpenCVとカメラを使ったフォームアプリケーション

はじめに カメラで撮影した画像を、OpenCVで処理してからフォームアプリで表示させたかったので作成した。撮影+画像処理はbackgroundWorker内で行い、timerでbackgroundWorkerを定期的に呼び出すことにした。 ツールのレイアウト TableLayoutPanel PictureBo…

OpenCVSharp4で勾配構造テンソルを使った二値化

OpenCVのチュートリアルのこの章をOpenCVSharp4仕様に書き換えた。 構造テンソルを使うと、勾配の方向や勾配の一貫性などがわかる。 解説↓ negizoku.hatenablog.jp プログラム using OpenCvSharp; namespace Anisotropic_image_segmentation_by_a_gradient_s…

ODEのオブジェクトの作り方

オブジェクト用の構造体を作る struct MyObject { dBodyID body; }; static MyObject sphere; C++ main関数で詳しく設定 sphere.body = dBodyCreate (world); dReal radius = 5.0; dMassSetSphere (&m,DENSITY,radius); C++ drawstuffのシミュレーションルー…

structure tenssor(構造テンソル、二次モーメント行列)について

はじめに OpenCVのチュートリアルの「Anisotropic image segmentation by a gradient structure tensor(勾配構造テンソルによる異方性画像の分割)」ので詰まったので、tructure tensorについて調べた。 定義- 2次元構造テンソル(2D structure tensor) 画像…

OpenCVSharp4の画像モーメントで面積、重心計算

画像のモーメントからは、面積・重心など様々な情報がわかる。 ↓使用例 negizoku.hatenablog.jp p=q=0p=q=0かつ画像IxyIxyが二値画像のとき、M00=m−1∑x=0n−1∑y=0IxyM00=∑x=0m−1∑y=0n−1Ixyとなり、画像の面積を表す。また、M00,M10,M01M00,M10,M01を使って重…

OpenCVSharp4で内外判定

内外判定とは 点が「領域の内側にあるか外側にあるか」判定すること Cv2.PointPolygoonTest()を使うと判定できる。オプションで領域との距離を測定することもできる。 プログラム OpenCVSharp4の導入はコチラ using System; using OpenCvSharp; namespace po…

OpenCVSharp4でバウンディングボックスの描画

バウンディングボックスとは ある領域を長方形(矩形)で囲むこと。今回は水平&鉛直方向に伸びた矩形と、斜めの矩形で検出する。 方法 OpenCVSharp4の導入はコチラ 画像を読み込み 二値化 エッジ検出 輪郭検出 親輪郭からバウンディングボックスを描画する …

OpenCVSharp4で多角形凸包してみた

はじめに 多角形凸包とは、ある領域を「ヘコみのない多角形」で囲むことである。 方法 画像を読み込む 輪郭を求める 輪郭の点の集合を集める 集めた点で凸包する 表示 プログラム ほとんどmotchy様のプログラムを参考にしたが、現バージョンに合わせて書き換…

Huモーメントについて

Huモーメント(Hu moments)とは 平行移動、回転移動、拡大縮小、鏡映しても値が変わらない「モーメント不変量」のひとつ。(ただし、鏡映したときはh7h7の符号が反転する)Huモーメントは7つのパラメータ[h1,h2,h3,h4,h5,h6,h7][h1,h2,h3,h4,h5,h6,h7]をもつ…

画像のモーメントってなんだよと思ったので

定義 画像のモーメントには 素モーメント(raw moment) 中心モーメント(central moment) の2種類がある。素モーメントは画像基準の座標系、中心モーメントは重心を原点とした座標系である。 素モーメント(raw moment)の定義 m×nm×nの画像IxyIxyに対して画像…

OpenCVSharp4で画像に等高線を描く

ゲームをやっていたら等高線を書きたくなったので。。。 方法 画像の正規化 画像の階調を粗くする 階調を荒くした画像でエッジ検出 階調を荒くした画像にエッジを上描き 等高線画像の表示 プログラム using System; using OpenCvSharp; namespace 等高線 { c…

OpenCVSharp4で輪郭検出

輪郭検出とは cannyなどで検出したエッジから、輪郭(ループ)を取り出すこと。OpenCVのCv2.FindContours()では輪郭同士の包含関係も取り出せる プログラム OpenCVSharp4の導入はコチラ using System; using OpenCvSharp; namespace Finding_contours { clas…

OpenCVSharp4でテンプレートマッチング

テンプレートマッチングとは 入力した画像から、テンプレートと似ている場所を抽出する方法。 方法 Cv2.MatchTemplate(src, templ, result, TemplateMatchModes) C# を使う。TemplateMatchModesには以下の種類がある TemplateMatchModes 和訳 説明 CCoeff 共…

OpenCVSharp4で逆投影

逆投影とは 2つの画像のヒストグラム中で近しいものを強調すること プログラム using System; using OpenCvSharp; namespace 逆投影 { class Program { static void Main(string[] args) { //画像の読み込み Mat src1 = new Mat(@"D:\Back_Projection_Theory…

OpenCVSharp4で凹凸係数法による影の除去

はじめに 凹凸係数 rijrij とは、各画素 xijxij をその周辺の平均輝度 RijRij で除することで得られる係数である。 カーネルを(2n+1)×(2n+1)(2n+1)×(2n+1)としたとき、凹凸係数 rijrij は次式で求まる。rij=xijRijrij=xijRijRij=1(2n+1)2n∑p=−nn∑q=−nxi+p,j+…

OpenCVSharp4でハフ変換による直線検出

ハフ変換(Hough Transform)について 直線を表す式としてよく知られるのが y=ax+by=ax+b である。このとき(a,b)(a,b)が決まれば直線の式も求まるので、直線をF(a,b)=y−(ax+b)=0F(a,b)=y−(ax+b)=0と考えることもできる。 しかし F(a,b)=0F(a,b)=0 の定義域は…

OpenCVSharp4で構造要素(structure elements)を使った処理

はじめに OpenCVの公式サイトを見てstructure elments(≒カーネル)を使った水平線・鉛直線の抽出を勉強した。 方法 structure elementsと一致する箇所だけを残し、楽譜から、線と音符を切り分ける。 画像を読み込む 読み込んだ画像を二値化し反転する 鉛直…

OpenCVSharp4で射影変換

射影変換とは 画像平面を任意の3D視点から見直すこと 方法 画像の読み込み 入力画像の4点を指定 出力画像の4点を指定 指定した点を対応させる射影変換のパラメータを求める 射影変換を行う 射影変換の数式は以下の通り。全部で9個のパラメータがあるが、8自…

OpenCVSharp4の画像の読込、表示および保存

基本的な機能も備忘録代わりに書いておく 画像の読み込み ①Mat()で読み込む方法と②Cv2.imread()で読み込む方法がある。 //①Mat()で読み込み Mat mat1 = new Mat("D:\\src.png"); //②Cv2.Imreadで読み込み Mat mat2 = Cv2.Imread("D:\\src.png"); C# ちなみに…

OpenCVSharp4で位相画像の作成

位相画像とは 位相限定相関法(Phase Only Correlation)などで使用される画像。フーリエ変換した画像の位相だけを取り出した画像のこと。 F[{Xij}]={Guv}F[{Xij}]={Guv}とするとPhaseImage({Xij})=F−1[{Guv|Guv|}]PhaseImage({Xij})=F−1[{Gu…

OpenCVSharp4のエッジ強調(一次微分、Prewitt、Sobel、Laplacian、canny etc...)

OpenCVSharp4の色々な輪郭抽出フィルタを試してみた※2020/06/08追記 正規化の方法が間違っていました。 方法 VisualStudioにNuGetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストール 次のプログラムを実行 using System; using OpenCvSharp; namespace…

OpenCVSharp4のカラーマップ機能を使った

カラーバーにするには Cv2.ApplyColorMap(src, dst, ColorConversionCodes) C# を使う //サンプルコード using System; using OpenCvSharp; namespace カラーマップ { class Program { static void Main(string[] args) { Mat mat = new Mat(@"D:\icon.jpg")…

OpenCVSharp4でmatの要素(画素)にアクセス

はじめに OpenCVSharp4でmatの要素にアクセスする方法をまとめた 値の取得 値の取得方法として①Atメソッドを使う方法②getメソッドを使う方法③インデクサーを使う方法がある。 using System; using OpenCvSharp; namespace Matの要素にアクセス { class Progr…

OpenCVSharp4でフーリエ画像の作成

サンプルプログラムをほとんどそのまま流用して、プログラムの順序を観察した。ちなみにOpenCVでのフーリエ変換はFFTでなくDFTである。 方法 VisualStudioにNuGetでOpenCVSHarp4とOpenCVSHarp4.runtime.winをインストール 下記のプログラムを実行 using Syst…

OpenCVSharp4の二値化を試す(単純二値化、大津の二値化、適応的二値化)

方法 VisualStudioにNuGetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストールする 次のプログラムを実行する using System; using OpenCvSharp; namespace 二値化 { class Program { static void Main(string[] args) { //入力画像を読み込みグレース…

OpenCVSharp4のMat行列の基本演算

自分へのメモも兼ねて基本演算をメモしておく プログラム using System; using OpenCvSharp; namespace matの演算を試してみる { class Program { static void Main(string[] args) { //計算用のmat1とmat2を定義 Mat mat1 = new Mat(3, 3, MatType.CV_64FC1…