サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
whoopsidaisies.hatenablog.com
背景差分 画像の前景と背景を分離する手法。2013年にOpenCV 2.4.7での背景差分の記事を書いたが、2018年になったいまOpenCV 3.4.1で背景差分を行おうとしたら使えるアルゴリズムが増えていたのでまとめておく。 アルゴリズム MOG, MOG2, GMG OpenCV 2.4.7でも使えた。以下のページに日本語でわかりやすい説明がある。 背景差分 — OpenCV-Python Tutorials KNN K近傍方に基づく背景差分。前景の画素数が少ない場合は効率が良いらしい。 Efficient adaptive density estimation per image pixel for the task of background subtraction - ScienceDirect CNT 低スペックな計算機でもほかのアルゴリズムより高速に処理ができる。CNTとい
基本的に公式サイトの説明とかの通りにやるだけなんだけど自分用にメモ。 ホストOS:ubuntu 16.04LTS dockerのインストール 参考: Get Docker for Ubuntu - Docker # https通信で公開鍵ダウンロードするため apt-get update apt-get install curl ca-certificates # dockerレポジトリの公開鍵の登録 curl -fsSL https://yum.dockerproject.org/gpg | apt-key add - # add-apt-repositoryコマンドのインストール apt-get install software-properties-common # dockerレポジトリ追加 add-apt-repository "deb https://apt.dockerpro
Python+OpenCVで画像の特徴点の特徴量を記述する.OpenCV2.4.9およびOpenCV3.0 alphaについて使用できるアルゴリズムをまとめる. Python+OpenCVで特徴点抽出・使えるアルゴリズムまとめ OpenCV2.4.9と3.0 alpha - whoopsidaisies's diary の続き. 環境 WindowsでOpenCV公式サイトのダウンロードページから2.4.9および3.0 alphaのビルド済みバイナリをダウンロードしてきて解凍したものを使う. 特徴量記述器の使い方 特徴点抽出のときのFeatureDetectorと同じように,特徴量記述についてもDescriptorExtractorという共通インターフェースが用意されている. 使い方は以下の通り. # 引数でどの特徴量記述子を使うか指定 extractor = cv2.Descriptor
DotSpatialは.NET向けのオープンソースの地理情報システムライブラリである.これを使ってGISで用いられるshpファイル(とセットのshxファイルとdbfファイル)を読み込む. DotSpatialのインストール Nuget経由でインストール可能.プロジェクトを右クリックして「NuGetパッケージの管理」を選択する.オンラインから「DotSpatial」で検索.たくさん出てくるが,ここでは「DotSpatial.Controls」選択してインストール. Mapコントロールの追加 GISデータ表示用のコントロールが用意されているのでそれを使ってみる. まず,一度プロジェクトをビルドする.そうするとDotSpatialのDLLが実行ファイルのディレクトリにコピーされる. ツールボックスの適当なところでクリックして「アイテムの選択(I)...」を選択. 「.NET Framework
ILNumericsは.NETで使用可能な数値計算等のライブラリである.グラフ表示機能も備わっているので,それを使ってC#のWindowsフォーム上に3次元グラフを表示する. ILNumericsのインストール 現在最新バージョン(4.x系)のILNumericsは14日間のトライアル版以外は有償だが,Community Editionという無償版が提供されていた3.x系のバージョンがNuGetでインストール可能なのでそれを使う. まず,Visual StudioでWindowsフォームアプリケーションを作成する. そして,プロジェクトを右クリックして「NuGetパッケージの管理」を選択する.オンラインから「ILNumerics」を検索・インストールする. グラフ表示用コントロールの配置 フォームデザイナを開きツールボックスの適当なところで右クリックして「アイテムの選択(I)...」を選択
軽量プログラミング言語が苦手なので敬遠していたが,世間ではPythonからOpenCVを呼ぶのが流行っているようなので,練習がてらOpenCVで使える特徴点抽出アルゴリズムをまとめてみる. OpenCV2.4.9とOpenCV3.0 alphaについてまとめる.3.0 betaはなぜか動かなかったのでいつか暇があれば調査. 環境 WindowsでOpenCV公式サイトのダウンロードページから2.4.9および3.0 alphaのビルド済みバイナリをダウンロードしてきて解凍したものを使う. PythonからのOpenCVの呼び出し方はこことかを参照. 特徴点抽出の使い方 OpenCVで実装されている特徴点抽出のアルゴリズムはいくつかあるが,FeatureDetectorという共通インターフェースを使うことでどのアルゴリズムでも同様の記述で使える.使い方は以下. # 画像読み込み img = c
OpenCV公式サイトのNEWSを見てたら「Image Watch plugin for Visual Studio」というのを見つけた.使ってみたら便利そうだったのでメモ.もっと早く知りたかった. わざわざimshowとかのコードを追加してウィンドウを表示させなくてもMatの中の画像を確認できる.また,拡大表示とか画素値の表示も出来るため通常のOpenCVの画像表示用のウィンドウより便利な気がする. Image Watch plugin for Visual Studioのインストール 以下のサイトからダウンロードしてきて指示にしたがってインストールするだけ. Image Watch extension 以下のサイトに詳しい手順等載ってます. Image Watchの使い方 | dandelion's log 使ってみる 以下のコードで試してみた.画像を表示させるためのコードは特に必要な
sin(x)/xのオートシェイプ オートシェイプできれいな波形を作りたいときがたまにあるのだけど,C#を使って上の画像みたいにsin(x)/xのオートシェイプをわりときれいに作れたので手順をまとめる. 試した環境はPowerPoint2010とVisual Studio 2013.バージョンが違うと少し変わる可能性はあると思う.(わざわざC#でやらずともVBAマクロでも同じことは出来るけど,VBAは苦手なのでC#でやる.VBAでのやり方も後述します) 出来上がったPowerPointファイルを以下からダウンロードできるようにしておいた. sinc.pptx - Google ドライブ NetOffice.PowerPointのインストール 以前「C#でExcelファイルを作成・グラフを挿入する NetOfficeによる方法 - whoopsidaisies's diary」で紹介した,Ne
OpenCV3.0系から文字認識モジュールが搭載されるようなので使ってみる.現状の3.0 alphaや3.0 betaでは,文字認識モジュールはメインレポジトリに組み込まれておらず開発用レポジトリのopencv_contribの方に入っているようで,opencv_contribと一緒にOpenCVをビルドする必要がある. OpenCVの文字認識モジュール OpenCVのドキュメントによると,以下の2種類の文字認識方法があるらしい. オープンソースのOCRライブラリtesseract-ocrを呼び出す方法 隠れマルコフモデルによる認識方法 今回は,1の方法について試してみる. 文字認識モジュールの準備 tesseract-ocrのダウンロード https://code.google.com/p/tesseract-ocr/downloads/listからVC++からtesseract-ocr
ファイルへの書き込みは以下 C#でCSVファイルにデータを書き込む ソースコード ファイルからの読み込みにはStreamReaderクラスを,文字をカンマごとに区切るのにはString.Splitメソッドを使用する. Nugetで検索したら便利そうなライブラリはたくさんあるし,Microsoft.VisualBasic.dllに含まれるTextFieldParserクラスを使う方法とかもあるが,ここではお手軽に使えるStreamReaderとString.Splitを使用. 以下は,CSVファイルから読み込んだ値をスペース区切りで画面に出力するプログラム. ダブルクォートがあってもそのまま除去できないし,データにカンマが含まれるものも扱えない.タイトル行とかももちろん認識しない. static void ReadCsv() { try { // csvファイルを開く using (var
SendKeysクラス キーボード入力をC#で自動化したい.SendKeysクラスのSendKeys.Sendメソッドを使う. SendKeys.Sendメソッドは,アクティブなアプリケーションにキーストロークを送ることができる. SendKeys.Send("test"); と書けば,"t","e","s","t"と順にキーが送られる.エンターキーやタブとかも{ENTER}や{TAB}といった感じで入力可能.そこらへんはMSDNのページにまとまってるのでそっちを参照. 確認 動作確認をするために,ボタンを押すとメモ帳にキー入力をするWindowフォームアプリケーションをを作った. private void button1_Click(object sender, EventArgs e) { Microsoft.VisualBasic.Interaction.AppActivate("メ
概要 Axis.PixelPositionToValueメソッドと,ChartコントロールのMouseClickイベントを使う. Chartコントロールの追加 Windows フォームアプリケーションを作成し,Chartコントロールを配置する.Chartコントロールはツールボックスの「データ」カテゴリの中にある. Axis.PixelPositionToValueメソッド Chartコントロールのクライアント座標値をChartコントロールのグラフ上での座標値に変換するメソッド.クライアント座標とは何かについては,以下のページを参照. スクリーン座標←→クライアント座標の変換を行うには? − @IT MouseClickイベントの追加 フォームデザインの画面でChartコントロールを右クリックしてプロパティを選択する.プロパティウィンドウのイベントボタンをクリック.MouseClickの横の
Chartコントロールの追加 Visual StudioのChartコントロールを使う. Windows フォームアプリケーションを作成し,Chartコントロールを配置する.Chartコントロールはツールボックスの「データ」カテゴリの中にある. ソースコード sin波とcos波を描画するサンプル. private void PlotSinCos() { // 1.Seriesの追加 chart1.Series.Clear(); chart1.Series.Add("sin"); chart1.Series.Add("cos"); // 2.グラフのタイプの設定 chart1.Series["sin"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series
OpenCV3.0.0-alphaのパッケージが公開されたと話題になっていたので使ってみる. Change Logを見るとAKAZE特徴量が組み込まれている. AKAZE特徴量の紹介と他特徴量との比較 - 遥かへのスピードランナー によるとAKAZE特徴量は,以前のOpenCVでもakaze-opencvというパッケージを入れれば使えたが,OpenCV3.0.0-alphaでは元々組み込まれているのでそのまま使えるようだ. 逆にSIFTやSURFなんかは元々OpenCVで使えたが OpenCV 3.0.0-alphaでSIFT/SURFを使う | .COM-POUND によると,opencv_contribに移動されてしまいOpenCVと一緒にビルドしないと使えないようである. OpenCV3.0.0-alphaでの変更点まとめ 以前当ブログで OpenCVで画像の特徴抽出・マッチングを行
opencv_contribを見てたら,DeepFlowというオプティカルフローのアルゴリズムが実装されていたので勉強ついでに使ってみる. DeepFlow DeepFlowはコンピュータビジョンの分野では有名な国際学会ICCV2013でWeinzaepfelらによって発表されたアルゴリズムである. HAL - INRIA :: [hal-00873592, version 1] DeepFlow: Large displacement optical flow with deep matching DeepFlowではDeep Matchingという画像のマッチング手法(これも同論文内で提案されている)を用いてオプティカルフローを求めている. 以下の画像にアルゴリズムの全体像がまとめられている. LEAR - DeepMatchingFlow パワーポイントの資料はこちら Deep Ma
流行りのDeep LearningをC#で試してみる.機械学習やコンピュータビジョン,信号処理等の.NET向けのオープンソースのライブラリであるAccord.NET FrameworkにDeep Learningが実装されているのでそれを使う. Deep Belief Networks(DBN), Deep Neural Networks(DNNs)とおまけにRestricted Boltzmann Machine(RBM)を単体で動かしてみる. Deep Learning自体については以下のページ等を参考に. MIRU2014 tutorial deeplearning Deep Learning技術の今 ディープラーニング チュートリアル(もしくは研究動向報告) Accord.NETのインストール NuGet経由でインストール可能.プロジェクトを右クリックして「NuGetパッケージの管
C#からExcelファイルを作って,グラフも挿入したい. 以前,以下の記事でClosedXmlというライブラリを使ってC#から簡単にExcelファイルを作る方法を紹介したが,グラフの挿入が出来ないのがグラフの挿入が出来ないのが気になっていた. C#でExcelファイルを作成する ClosedXmlを使用 - whoopsidaisies's diary NetOfficeというライブラリを使えば,ClosedXmlと同じくらい簡単にExcelファイルが作成でき,さらにグラフの挿入も行えるので,今回はその方法を紹介する. NetOfficeのインストール NetOfficeはMicrosoft Officeにアクセスするための.NETのライブラリで,今回紹介するExcel以外にも,Word, PowerPoint等にもアクセスできるらしい. インストールはNuget経由で可能.プロジェクトを
Magick.NET 100種類以上の画像を操作したり表示したりできるライブラリImageMagickのC#ラッパMagick.NETを使って,C#でAI,PSD,EPS,SVG,PDF等の画像ファイルを開く. インストール NuGet経由でインストール可能.プロジェクトを右クリックして「NuGetパッケージの管理」を選択する.オンラインから「Magick.NET」を検索してインストール. プラットフォームを変える プロジェクトのプラットフォームをインストールしたパッケージ(「x64」か「x86」)に変える.「Any CPU」だと動かない場合があるので注意. サンプルコード 以下にepsファイルを開いて,PictureBoxに表示するサンプルを示す.ファイル名の部分を変えれば,eps以外のファイルも読み込むことが出来る. var magickImage = new ImageMagick.
※追記:OpenCV 3.4.1版の記事は下記リンク。使えるアルゴリズムが増えている。 whoopsidaisies.hatenablog.com 以降はOpenCV 2.4.7のサンプル。 背景差分 固定カメラで移動物体の検出をするのに有効な手法.OpenCV2.4.7では混合正規分布(Mixture of Gaussian Distribution, MoG)によるアルゴリズム,Godbehere,Matsukawa,Goldbergによるアルゴリズム(GMG)が用意されているので試してみる. サンプルコード BackgroundSubtractorMOGクラス,BackgroundSubtractorMOG2クラスおよびBackgroundSubtractorGMGクラスで背景差分の計算ができる. アルゴリズムによってパラメータ等が違うが,基本的な計算は共通の書き方で使用できる.以下
オプティカルフロー 動画から密なオプティカルフローの計算を行う.SimpleFlowアルゴリズムによるオプティカルフロー,TV‐L1オプティカルフロー,Farnebackのオプティカルフロー,Broxのオプティカルフロー,Lucas-Kanade法によるオプティカルフロー等によって密なオプティカルフローの計算ができる. ソースコード cv::calcOpticalFlow○○メソッドを使うと,呼び出すたびにパラメータを渡さなくてはいけなくて見た目がすっきりしないのと,アルゴリズムによって3チャンネルの画像だったり1チャンネルの画像だったりで面倒. cv::superress::createOptFlow_○○でDenseOpticalFlowExtクラスのオブジェクトを作れば,そこら辺の面倒な処理を中でやってくれるので楽.以下,ソースコード.色符号化によるオプティカルフローの可視化を行って
Math.NET Numericsのインストール .NET向けの数値計算ライブラリであるMath.NET Numericsを使う.Nugetからインストール可能である.プロジェクトの右クリックメニューから「Nugetパッケージの管理」をクリックし,出てきたダイアログで「Math.NET Numerics」検索しインストールする. ソースコード 以下が確認用プログラムのソースコード. using System; using System.Collections.Generic; using MathNet.Numerics.Statistics; namespace MathNetTest { class Program { static void Main(string[] args) { var data = new double[] { 3, 4, 5, 6, 10 }; // Lis
概要 Detectron2のModel Zooにある訓練済みを使って、物体検出やインスタンスセグメンテーション、姿勢推定等を行う。 多くのモデルに対して一括で処理できるコードを作った。便利。 Detectron2 FacebookのAI研究グループ(FAIR)が開発している物体検出アルゴリズムを実装のためのソフトウェア。 環境 ubuntu 18.04 GeForce GTX TITAN X インストール 詳細は省略。ほぼ公式の通りやった。Windowsでやろうとしたら公式対応してないから大変そうな雰囲気。 メモ代わりに大雑把な手順を載せるが公式を読んでやったほうがいい。 OS、cuda等:dockerコンテナ利用 nvidia/cuda:10.1-cudnn7-devel Python環境 Anaconda 2019.10でpython3.7環境構築 pytorch conda inst
.NETフレームワーク用のグラフ描画ライブラリであるOxyPlotを使ってグラフを描く. その中でもFunctionSeriesクラスを使って与えられた関数のグラフを描く方法を記す. OxyPlotはWindows Formアプリケーションだけでなく,WPF,Silverlight,Windows8等様々な環境で使える. Chartコントロールとの比較 Chartコントロールによるグラフの描画方法は以下の別の記事で紹介したことがあるが,比較してOxyPlotの方が良いなと思っている点をあげる. 関数を渡してこの範囲を表示するとかが楽(今回の記事のメイン.詳細は後述.たとえば のの範囲のグラフを描画とか) マウス操作によるグラフの拡大・縮小,移動等の機能が最初からついている ベクター画像できれいにグラフを保存できる(ChartコントロールでもEMFで保存できるがグラフの種類によっては汚い)
ActiViz C#で3Dモデル表示する方法はたくさんあると思うが,今回は,3Dコンピュータグラフィックスの可視化ライブラリであるVTK(The Visualization ToolKit)の,C#ラッパ「ActiViz」を使った方法について書く. ActiVizおよびVTKの良さそうな点を以下にざっとあげる. オープンソース NuGet経由で簡単インストール C#のWindows フォーム アプリケーション用のコントロールが用意されている 表示するだけなら結構短いコードで書ける VTKは次期OpenCVとかPCL(Point Cloud Library)とかでも使われているので,書き方を覚えておくと便利? という感じで,手軽かつそれなりに汎用性がありそう. インストール NuGet経由でインストール可能.プロジェクトを右クリックして「NuGetパッケージの管理」を選択する.オンラインから
概要 AForge.NET Frameworkを使う.AForge.NET Frameworkは,コンピュータビジョンとか人工知能の分野の開発者・研究者向けのフレームワーク.DirectShowでビデオを読み込むクラスが実装されているので,それを使う. 手順 「Windows フォーム アプリケーション」を作成 AForge.NETのインストール Nugetにパッケージがあるのでインストール.Nugetの使い方がわからない人はここらへんを参照.AForge.NET関連のパッケージは役割に応じてたくさんあるが,今回は「AForge.Controls」と「AForge.Video.DirectShow」を選択してインストール.すると,依存関係のあるパッケージもインストールされる. VideoSourcePlayerのコントロールの配置 AForge.NETで用意されている動画表示用のコントロー
マウスの移動とクリック マウスの移動にはSetCursorPos関数,クリックにはmouse_event関数を使う. どちらの関数もUSER32.dllに実装されているため,DllImport属性を使用して宣言する.DllImport属性は,System.Runtime.InteropServices名前空間にあるのでusing宣言しておく. using System.Runtime.InteropServices; [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)] static extern void SetCursorPos(int X, int Y); [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCal
概要 OpenCVでは特徴点抽出,特徴記述,特徴点のマッチングついて様々なアルゴリズムが実装されているが,それぞれ共通のインターフェースが用意されている.共通インターフェースを使えば,違うアルゴリズムであっても同じ書き方で使うことができる. 特徴点抽出はFeatureDetectorインターフェース,特徴記述はDescriptorExtractorインターフェース,マッチングはDescriptorMatcherインターフェースである.いずれのインターフェースも,オブジェクト生成時に文字列によってアルゴリズムを指定することができる. 以下に使い方を簡単にまとめる.(OpenCV2.4.7の情報.バージョンが古いと使えないアルゴリズムがあるので注意.OpenCV3.0.0-alphaでの変更点は「OpenCV3.0.0-alphaの特徴抽出・マッチングまとめ - whoopsidaisies'
OpenCVラッパクラス C#でOpenCVを手軽に使うには OpenCvSharpをつかう その17(NuGetで導入) - schima.hatenablog.com C#でOpenCVを動かす~NuGetでOpenCV.Netをインストール - whoopsidaisies's diary のページのように,NuGetからC#ラッパをインストールして使う方法があるが,必要な機能がラッピングされていないことがある. このページでは,C++/CLIでOpenCVの必要な機能だけ持つラッパクラスを自分で作り,C#から呼び出す方法を紹介する. C++/CLI 通常のC++のライブラリをC#から呼び出そうとするとDllImport属性で宣言が必要だったりして面倒であるが,C++/CLIで作ったDLLであれば参照に追加するだけで使用できる. 手順 手順は以下の通りである. C#プロジェクト作成
tesseract-ocr tesseract-ocrはオープンソースのOCR(光学文字認識)エンジン.60以上の言語に対応しており,日本語の文字認識も可能. A .Net wrapper for tesseract-ocr tesseract-ocrはapiが用意されているが,そのC#ラッパー「A .Net wrapper for tesseract-ocr」を使う. インストールはNuGetから行える.プロジェクトの右クリックメニューから「Nugetパッケージの管理」をクリックし,出てきたダイアログで「ocr」で検索すれば「A .Net wrapper for tesseract-ocr」が出てくるのでインストールする. 言語データのダウンロード tesseract-ocrでは言語ごとに学習済みのデータファイルが用意されており,それを読み込む必要がある.以下のページからダウンロード可能
次のページ
このページを最初にブックマークしてみませんか?
『whoopsidaisies's diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く