おぺんcv

画像処理エンジニアのブログ

OpenCVのDNNモジュールがCUDAバックエンドに対応した

はじめに 1年ちょっとぶりにブログ更新しました、お久しぶりです さて、去年12月にOpenCVの最新バージョンであるOpenCV 4.2.0がリリースされました そのChange Logをみると嬉しい更新が DNN module: Integrated GSoC project with CUDA backend: #14827 DNN…

OpenCVのサンプルコードでEnetを動かしてみた

はじめに OpenCVのサンプルコードを使って、Enet(Semantic Segmentationのモデル)を試してみました はじめに Enetとは ビルド 学習済みモデルのダウンロード 実行 結果 おわりに Enetとは [1]で提案されている、Semantic Segmentationのネットワークです リ…

継承を用いたPimplのようなこと

C++

はじめに C++における実装の隠蔽やインクルード依存削減についての話です おそらく過去に何度も議論されていて何番煎じのネタかわかりませんが、自分にとっての気づきだったので書いておきます Pimplイディオムといえば… クラスに「Impl」という実装担当クラ…

近況

はじめに この1年は仕事に没頭してました 去年の4月に初めてPLを務めた案件があって、ようやく一区切りついたところです ブログを書く気力はなかったのですが、趣味でコードは書いてました(笑) そこで今回はこの1年で更新or新規に書いたコードを簡単に紹介し…

Visual Studio 2015でHalideを始める

Halideという画像処理向けのプログラミング言語を始めるべく Visual Studio 2015でHalideの環境構築をしてみました 今回はその手順について紹介します はじめに やること 事前に必要なもの ソースの入手 Halid LLVMとClang ビルド LLVMのビルド Clangのビル…

Stixel Computationを実装してみた multi-layer編

はじめに 以前Stixel Computationを実装してみたで紹介したStixelですが 今回はその発展形である、Multi-Layered Stixelを実装してみました 概要 Stixelとは、Daimlerが研究しているステレオカメラによる障害物検出の手法です 画像を幅5~10ピクセル程度の細…

3次元のcv::Matを作る

はじめに 小ネタです cv::Matが多次元に対応しているのを知ったのでメモ 作り方 多次元Matのコンストラクタがこちら(mat.hppより抜粋) ndimsで次元数を、sizesで各次元の長さを、typeで要素の型を指定します /** @overload @param ndims Array dimensionalit…

kd-treeを実装してみた

はじめに kd-treeを実装してみました 最近仕事でよく使うので勉強がてら kd-treeとは 最近傍探索を効率的にできるデータ構造です kd木 - Wikipediakd-treeが使えるライブラリとしてはFLANNやPCLが有名どころでしょうか ソースコード 以下に公開してあります …

ARM NEONの使い方 除算編

ARM

四則演算ラスト! 今回は除算編です アーキテクチャによる違い 32bit ARM 32bit ARMには除算を直接行うSIMD命令がないため a/bという除算を行う場合、まず逆数を計算するSIMD命令によってbの逆数を計算し これをaと掛け算することによって除算を表現します 6…

Stixel Computationを実装してみた

6D-Visionについて調べてみたで紹介したStixelですが ちまちまと実装を重ね、ようやくひと段落したので公開することにしました ソースコード github.com デモ 物体上に出てる棒のようなものがStixelです 入力の視差はOpenCVのStereo SGBMで計算していますyou…

ARM NEONの使い方 乗算編

ARM

今回は乗算編です 特に変わった内容はありません 乗算 vmul[q]_<type>(va, vb) 64bit(qが付く場合は128bit)のベクタvaとvbの乗算 サンプル 符号付き16bit整数ベクタの乗算をしてみます #include <stdio.h> #include <stdint.h> #include <arm_neon.h> int main() { int16_t a[4] = { 1, 2, 3, 4 };</arm_neon.h></stdint.h></stdio.h></type>…

ARM NEONの使い方 減算編

ARM

年内に終わるかな? 今回は減算編です 減算 (通常の減算、符号拡張付き減算、飽和付き減算) 加算編で紹介したものとほぼ変わらないので、まとめて紹介 vsub[q]_<type>(va, vb) 64bit(qが付く場合は128bit)のベクタvaとvbの引き算 vsubl_<type>(va, vb) 64bitのベクタvaとv</type></type>…

Free Space Computationを実装してみた

以前の記事で紹介したFree Space Computationですが 実装がひと段落したので公開することにしました ソースコード github.com デモ free space(走行可能領域)の推定結果を赤で塗ってます まあなんとなく計算できてるような…? なお、実際の処理時間は動画ほ…

ARM NEONの使い方 加算編

ARM

四則演算編の予定でしたが、量が多いので分割することにしました 今回は加算編です 加算 vadd[q]_<type>(va, vb) 64bit(qが付く場合は128bit)のベクタvaとvbを足します 戻り値のサイズは入力のサイズと同じです サンプル 符号付き16bit整数のベクタvaとvbをvadd_s1</type>…

ARM NEONの使い方 ロード・ストア編

ARM

ロード vld1[q]_<type>(ptr)はptrから64bit(qが付く場合は128bit)のベクタをロードします サンプル 符号付き16bit整数のベクタをロードしてみます ロードしたベクタの各レーンをvget_lane_s16()で取得し、表示してみます #include <stdio.h> #include <stdint.h> #include <arm_neon.h> int main()</arm_neon.h></stdint.h></stdio.h></type>…

CUDA 8がVisual Studio 2015 Update 3に対応した

今年の6月頃からCUDA 8.0 RC(Release Candidate)は出てたのですが このたび正式なCUDA 8.0がリリースされたようです CUDA Toolkit | NVIDIA DeveloperParallel Forall Blog - Nvidiaでも紹介されていて 個人的に嬉しかったのがVisual Studio 2015 Update 2以…

ARM NEONの使い方 組み込み関数一覧編

ARM

組み込み関数一覧 こちらのページにNEONの組み込み関数一覧が載ってます 慣れてきたらここから必要な演算を探すと良いでしょう infocenter.arm.com 命名規則 NEONの組み込み関数は大抵のものが以下の規則で名前が付けられています <opname>[q]_<type><opname>はvaddやvmul等、演算</opname></type></opname>…

ARM NEONの使い方 データ型編

ARM

NEONデータ型の概要 NEONのデータ型は以下の規則で名前が付けられています <type><size>x<number of lanes>_t例えば、 int16x4_t は符号付き16bit整数を4個保持する型となります それぞれの要素を「レーン」と呼びますNEONのデータ型は64bitのものと128bitのものがあります NEONデータ型一</number></size></type>…

ARM NEONの使い方 予告編

ARM

はじめに ここ最近、NEON(ARMのSIMD命令)を使ったプログラムを初めて書きました NEONについて調べていて思ったのが、NEONの使い方を初心者向けに 日本語で説明したページがあまり見当たらないということ そんなわけで、自分なりにNEONの使い方をまとめておこ…

今使ってるvimプラグイン

最近の私はIDE(Visual Studio、Eclipse)を中心に開発することが多かったのですが 休日は久々にvimで遊びました というわけで(?)、現在私が使っているvimプラグインをご紹介します 私は普段c++を使うことが多いので、c++向けの設定も入ってます 目次 目次 プ…

Free Space Computation

以前の記事で紹介したStixelのアルゴリズムに登場する Free Space Computationを実装しようと頑張ってます Free Space Computationとは 視差画像をもとにシーンのFree Space(移動可能な領域、路面)を推定する手法です 推定結果のイメージです(赤く塗った領域…

EISATS

EISATS | Reinhard Klette: CCVというコンピュータビジョン向けのデータセットがありまして EISATS The .enpeda.. Image Sequence Analysis Test Site (EISATS) offers sets of image sequences for the purpose of comparative performance evaluation of s…

6D-Visionについて調べてみた

車載ステレオカメラによる画像認識技術「6D-Vision」について調べてみました 6D-Visionとは 6D-Visionとは自動車メーカーのダイムラー(Daimler AG)が開発している 自動運転のための画像認識技術です メルセデス・ベンツの資料に 2012 年からは、メルセデス・ …

Mean-shift Trackingを実装してみた

勉強のためにMean-shift Trackingを実装してみました ソースコード 以下に公開してあります github.com 参考 実装の際に参考にしたのはOpenCVのCamShiftのサンプルコードと こちらのintelの論文です http://opencv.jp/opencv-1.0.0_org/docs/papers/camshift…

WindowsにOpenCV 3 + Visual Studio 2015の環境を構築する

WindowsにOpenCVとVisual Studioをインストールして画像処理を始めましょう OpenCVとVisual Studioのバージョンは2016年7月時点で最新のものを選びました やること OpenCV 3.1のインストール・設定 Visual Studio 2015のインストール・設定 CMake 3.5.2のイ…

Google Code Jamに参加してみた

Googleが開催するプログラミングコンテスト「Google Code Jam」の予選ラウンドに参加しました 全4問のうち、正解率の高かった2問は何とか解くことができたのですが 3問目で解答が思いつかず降参 プログラミングコンテスト、興味はあって取り組むようにし…

字下げスタイルとわたし

「字下げスタイル?コーディング作法って何?」 って感じで学生の頃はこんなコードを書いてました void func(float *a,float *b,int n){ for(int i=0; i

OpenCVのMean-shift Trackingを試してみた

OpenCVで使える、色ベースのトラッキング「meanShift」と「CamShift」を紹介します! 何ができるの? 追跡したい対象の領域をはじめに指定することで、 その色情報(ヒストグラム)をもとに、対象を追跡できます 探索窓が固定なMeanShiftに対し、CamShiftは物…

社会人プログラマーになって約1年がたった

わかったのはコンピュータの世界が果てしないということ たまに勉強すべきことが多すぎて呆然とする