画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

07 | 2017/08 | 09
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開

新ブログにて、拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開しました。

もし良かったら、触ってみて下さい。


詳しくはこちら↓
拡大鏡+輝度値表示+ルーラー機能アプリ MagnifyEx Ver.1.1.0

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

パノラマ写真作成ソフト『Image Composite Editor』

メインページ

最近買ったHS10というカメラには、スイングパノラマという機能があり、カメラを上下、もしくは左右にスイングしながら撮影することでパノラマ画像を作成してくれる機能があるのですが、今日、東京スカイツリーのご近所の浅草へ行ってきたのですが、このカメラを持って行くのを忘れてしまい、泣く泣くiPhone3GSにて東京スカイツリーを撮影。

でも、パノラマソフトがきっとあるんじゃないか?と思い、とりあえずパノラマ接合ように写真だけは撮っておいて、パノラマ写真作成ソフトを探してみました。

すると、Microsoft Researchが公開している
  Image Composite Editor
というソフトがあったので、これを使ってみましたが、こいつがなかなかイイ!
(ネタ元)http://d.hatena.ne.jp/TERRAZI/20080925/p1

普通に遠くから撮影した画像はこんな感じ。
パノラマ画像作成ソフト
ちなみに撮影したのは、浅草ビューホテルの蒔絵というフランス料理店より。
2010.11.6現在、497m!

これを近くの業平橋駅のホームから複数枚の写真を撮影してパノラマ合成したのがこちら↓
パノラマ画像作成ソフト
iPhoneで撮影した割には、なかなか迫力のある画像になりました。

使い方はネタ元のリンク先にも書いてありますが、とっても簡単。

パノラマ作成ソフトの入手は下記ページのDownload for ×× をクリックで入手できます。
 Image Composite Editor

まずはパノラマ画像に用いる画像を撮影。
少しずつ重なるように撮影するのがポイント!

パノラマ画像作成ソフトパノラマ画像作成ソフト
パノラマ画像作成ソフトパノラマ画像作成ソフト
パノラマ画像作成ソフト

Image Composite Editorを起動し、パノラマ合成する画像ファイルをDrag&Dropで追加する。
パノラマ画像作成ソフト

ファイルをDrag&Dropすると自動的にパノラマ合成されますが、画像の輪郭が歪んだ状態になっているのでAutomatic Cropをクリックし、画像サイズを調整します。
(自分でマニュアル調整することもできます。)
パノラマ画像作成ソフト

次にExport diskのボタンをクリックします。
必要によっては出力ファイルフォーマット、圧縮率、画像サイズなどを指定します。
パノラマ画像作成ソフト

そして出来たのがこちら↓の画像
パノラマ画像作成ソフト

これができるってことは、iPhoneをスキャナ替わりに使う事もできるし、これから無駄に写真を多く撮ってしまいそうな予感。

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

フィルタ処理の高速化アルゴリズム(縦横に処理を分ける)

メインページ画像処理

前回、フィルタ処理の高速化アルゴリズム(重複した計算を行わない)で紹介した方法では
カーネルの値が全て同じでないと使えないので、今回はフィルタ処理を縦方向と横方向に
分けて行う事でフィルタ処理の高速化を行う方法をガウシアンフィルタを例にとって紹介します。

ガウシアンフィルタのカーネルには、

   ガウシアンフィルタのカーネル

が良く用いられますが、この処理を注目画素の周辺の輝度値をI0~I8とした場合、
ガウシアンフィルタの処理を行列で

    ガウシアンフィルタ
と、表すこともでき、この事は縦方向に3×1のガウシアンフィルタ処理をおこなってから、
横方向に1×3のガウシアンフィルタ処理を行うことを意味しています。
(横方向に処理をしてから縦方向に処理をしても同じです。)

このように処理を縦と横に分けることで、カーネルのサイズm×nの場合、通常の処理では
m×n回の掛け算を行うところ、m+n回の掛け算で済む事になります。
(ただし、縦横に処理を分ける事で全画素を2回参照することになるので、カーネルのサイズが
小さいと効果はあまりありません。)

他にも、移動平均フィルタの場合
  移動平均フィルタ
ソーベルフィルタの場合

  ソーベルフィルタ

となります。
ソーベルフィルタの行列を見ると、縦方向にガウシアンフィルタ処理をしてから、横方向に
微分処理している事が分かりやすくなっているかと思います。

また、比較的処理の重いメディアンフィルタにおいても、処理を縦と横に分けることによって、
ほぼ、同様な効果を得ることができます。
厳密には同じ結果にはならないのですが、スパイクノイズを除去するという意味では
十分な結果を得る事が出来ます。

試しに何回か、メディアンフィルタ処理を縦方向に1列分の処理を行ってから、横方向に1列分の
処理を行ってみましたが、ほぼ、良好な結果を得る事ができていると思います。
(画像にするともう少し分かりやすいかと思いますが、プログラムが無いもので...)

メディアンフィルタの例

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

フィルタ処理の高速化アルゴリズム(重複した計算を行わない)

メインページ画像処理

画像フィルタ処理の高速化のテクニックを移動平均フィルタを例にとって紹介したいと思います。

カーネルのサイズが5×5の移動平均フィルタの場合、注目画素の周辺の5×5の輝度値を合計し、
その輝度値の合計を画素数(5×5=25)で割る処理をラスタスキャンしながら、全画素に対して
処理を行います。

    フィルタ処理の高速化

ここで、隣の画素へ処理が移った時に、輝度値の合計の計算処理は前に行った輝度値の合計の
処理とかなりかぶっている(下図の緑色の部分)事に気が付きます。

   フィルタ処理の高速化

そこで、最初の輝度値の平均値を計算をした時の輝度値の合計値を保持しておき、最初の輝度値の
合計値から、最初のカーネルの左端の1列分の輝度値(上図の赤色の部分)を引き、
次のカーネルの右端の1列分の輝度値(上図の青色の部分)を足すと、次のカーネル内の
輝度値の合計値を求める事が出来ます。

そうすると、カーネル内の輝度値の合計の計算に25回の足し算をしていたところ、5回の引き算と
5回の足し算の計10回の計算で済ませることが分かります。
この効果はカーネルサイズが大きくなればなる程、大きくなります。

さらに画像の1行分の合計値を確保するメモリを確保しておくと、縦方向に関しても同様の処理が
できるので、高速化が期待できます。

と、今回は画像のフィルタ処理を例にとって紹介していますが、この考え方は他にもいろいろと
応用が効くので、輝度値の合計の計算に留まらず、毎回同じような処理をしているな~と思ったら、
前回行った処理の使いまわしができないか?検討してみると良いでしょう。
Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

残効錯視

メインページ画像処理プログラミング


今回はちょっとお遊び。
色の付いた画像をしばらく見て、モノクロの画像を見ると、このモノクロの画像がカラーに
見えるという錯覚(残効錯視)なるものがあるのは知っていたのですが、今日、
『ザ・ベストハウス123』という番組で少し詳しく解説をやっていた。

それによると、本来のカラーの色の補色(反転色)を見てから、モノクロ画像を見ると
脳の錯覚によりモノクロの画像がカラーに見えるらしい...

この残効錯視を任意の画像で体験できるようにプログラムを作ってみました。

以下、プログラムの動作について。

最初にカラーの画像を開くと、もとのカラー画像がちょっとチラ見
残効錯視

次に色を反転した画像を20秒間表示
残効錯視

20秒後、モノクロ画像を表示
残効錯視

すると、モノクロの画像のはずの画像がカラーに見えます。
中心の黒い点から目を離さずに見ていると、長くカラーに見えます。

で、こちらが動作イメージ
残効錯視


このプログラムはこちらIEにて右ボタン→対象をファイルに保存)からダウンロードできます。
(.NET Framework2.0が必要です。)

適当に作ったので、バグがあったらごめんなさい。
(モノクロ画像を開くと確実にエラーになると思います。)

興味があればダウンロードしてみて下さい。

  

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

.NET(C++/CLI)による画像拡大縮小表示、画像処理サンプルプログラム

メインページ画像処理プログラミング

これまで紹介してきた内容の総集編的なサンプルプログラムを作成してみました。
これから画像処理を学ぶ人にも使ってもらえると幸いです。
でも、これ以上の内容は本職の仕事にも差し支えそうなので、これがギリかも。
(ちなみに本職では画像処理ツール画像処理アルゴリズムの開発やってます。)

基本的な機能としては
●拡大縮小表示(10,25,50,75,100,150,200,500,750,1000,5000,10000%)
●内挿補間表示
(NearestNeighbor, Bilinear, Bicubic, HighQualityBilinear, HighQualityBicubic)
●カラーモノクロ変換(RGB平均、YUVのY)
●二値化処理(しきい値設定可)
●ファイルフォーマット変換(bmp,jpg,png,tifファイルの読み込み、保存)

画像処理ではモノクロ8Bitでの画像処理が多いのですが、Windowsのペイントとかで
サンプル画像を作成するとカラーになってしまうので、モノクロ変換は重宝すると思います。

サンプルプログラムのソースはこちら
I.Eにて右ボタンで対象をファイルに保存)よりダウンロードできます。Visual C++ 2005 Express EditionによりC++/CLIで作成しています。

 内挿補間表示

NearestNeighbor表示例
NearestNeighbor

Bicubic表示例

Bicubic


 カラーモノクロ変換

カラー画像
カラー画像

モノクロ変換(R,G,B平均) 
メニューのフィルタ→カラーモノクロ変換1にて実行
  Gray = (R + G + B) / 3

カラーモノクロ変換

モノクロ変換(YUVのY) メニューのフィルタ→カラーモノクロ変換2にて実行
  Gray = 0.299×R + 0.587×G + 0.114×B

カラーモノクロ変換


以下、モノクロ変換部分のソースコード
//--------------------------------------------------------------
//【関数名 】:Filter::Color2Gray1
//【処理概要】:カラー画像をモノクログレーへ変換
//【引数  】:pSrc        = 入力画像(24Bitカラー)(In)
//            :pDst        = 出力画像(8Bitモノクロ)(In)
//            :Width        = 画像の幅(In)
//            :Height        = 画像の高さ(In)
//【戻り値 】:なし
//【備考  】:Mono = (R + G + B) / 3
//---------------------------------------------------------------
void Filter::Color2Mono1(unsigned char* pSrc, unsigned char* pDst, int Width,
                                 int
Height){
    int i, j;
    int SrcStride, DstStride;

    //入力画像(カラー画像)のメモリの幅
    SrcStride = ((Width * 24 + 31) / 32) * 4;
    //出力画像(モノクロ画像)のメモリの幅
    DstStride = ((Width * 8 + 31) / 32) * 4;

    for (j = 0; j < Height; j++){
        for (i = 0; i < Width; i++){
            pDst[i + j * DstStride] = (                       //Mono
                         pSrc[i * 3 +     j * SrcStride]   //B
                       + pSrc[i * 3 + 1 + j * SrcStride]   //G
                       + pSrc[i * 3 + 2 + j * SrcStride]   //R
                       ) / 3;
        }
    }
}

//--------------------------------------------------------------
//【関数名 】:Filter::Color2Gray2
//【処理概要】:カラー画像をモノクログレーへ変換
//【引数  】:pSrc        = 入力画像(24Bitカラー)(In)
//            :pDst        = 出力画像(8Bitモノクロ)(In)
//            :Width        = 画像の幅(In)
//            :Height        = 画像の高さ(In)
//【戻り値 】:なし
//【備考  】:Mono = 0.299 * R + 0.587 * G + 0.114 * B
//            :YUV変換のYと同じ
//---------------------------------------------------------------
void Filter::Color2Mono2(unsigned char* pSrc, unsigned char* pDst, int Width,
                                  int
Height){
    int i, j;
    int SrcStride, DstStride;
    unsigned char RLut[256], GLut[256], BLut[256];

    //入力画像(カラー画像)のメモリの幅
    SrcStride = ((Width * 24 + 31) / 32) * 4;
    //出力画像(モノクロ画像)のメモリの幅
    DstStride = ((Width * 8 + 31) / 32) * 4;

    //RGBそれぞれのLUTを作成
    for (i = 0; i < 256; i++){
        RLut[i] = (unsigned char)System::Math::Round(0.299 * i);
        GLut[i] = (unsigned char)System::Math::Round(0.587 * i);
        BLut[i] = (unsigned char)System::Math::Round(0.114 * i);
    }
   
    for (j = 0; j < Height; j++){
        for (i = 0; i < Width; i++){
            pDst[i + j * DstStride] =                             //Mono
                         BLut[pSrc[i * 3 +     j * SrcStride]]    //B
                       + GLut[pSrc[i * 3 + 1 + j * SrcStride]]    //G
                       + RLut[pSrc[i * 3 + 2 + j * SrcStride]]    //R
                       ;
        }
    }
}


 二値化処理

元画像
元画像

モノクロ変換
モノクロ変換

二値化しきい値設定
二値化しきい値設定

二値化処理
二値化処理

以下、二値化処理部分のソースコード
//-------------------------------------------------------------
//【関数名 】:Filter::Binarization
//【処理概要】:二値化
//【引数  】:pSrc        = 入力画像(8Bitモノクロ)(In)
//            :pDst        = 出力画像(8Bitモノクロ)(In)
//            :Width        = 画像の幅(In)
//            :Height        = 画像の高さ(In)
//            :Threshold    = しきい値(In)
//【戻り値 】:なし
//【備考  】:
//--------------------------------------------------------------
void Filter::Binarization(unsigned char* pSrc, unsigned char* pDst, int Width,
                               int Height, int Threshold){
    int i;
    int BufSize;
    unsigned char LUT[256] = {0};
   
    //画像全体のメモリサイズ
    BufSize = (Width + 3) / 4 * 4 * Height;

    //二値化ルックアップテーブルの作成
    for ( i = Threshold; i < 256; i++)
        LUT[i] = 255;

    //二値化処理
    for ( i = 0; i < BufSize; i++)
        pDst[i] =  LUT[ pSrc[i] ];

}


 関連ページ

 
二値化
  処理時間の計測(Stopwatchクラス)
  ウィンドウを開く/閉じる
  ウィンドウの押されたボタンを取得(DialogResultプロパティ)
  フォーム(ウィンドウ)のサイズ固定
  フォーム間参照
  テキストボックスの文字列を変数へ代入
  ファイルパス(フルパス)からファイル名、拡張子、ディレクトリの取得
  Graphicsオブジェクトの作成
  画像の拡大縮小表示(高機能版)
  画像の輝度値を取得、設定する
 
Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

VB6.0でポインタを扱う

 目次ページへ

VB6.0では基本的にはポインタは扱えない事になっていますが、全く、扱えない訳ではありません。

■配列からポインタ(先頭アドレス)を取得する。
 先頭アドレスを取得する関数はVarPtrというのがあり
 Dim Buf(99, 99) as Byte
 としたときのポインタ(先頭アドレス)は
 
 Dim ptr as Long
 prt = VarPtr(Buf(0, 0))

 で取得可能

■ポインタ(先頭アドレス)をAPIへ渡す。
 APIの宣言の型は as Any として例えばこんな感じ↓
 
 Public Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, lpBits As Any, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long


 呼び出す側はポインタ(先頭アドレス)にByValを付けて渡す

 Call StretchDIBits(hdc, 0, 0, dstWidth, sdtHeight, 0, 0, srcWidth, srcHeight, ByVal ptr, BmpInfo, 0, SRCCOPY)

■ポインタで管理可能なメモリを確保する。
 メモリの確保には、VirtualAlloc関数を使って、戻り値をポインタとして扱う


 ptr = VirtualAlloc(ByVal 0&, BufSize, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)

 もちろん、使い終わったら開放するのを忘れないように

 Call VirtualFree(ByVal ptr, 0, MEM_RELEASE)

 という感じで。

■確保したメモリ(ポインタ)の中身を参照する。
 これはさすがにそのままでは参照することができないので、配列にコピーしてから参照するしかないようです。

 '参照用のメモリ確保
 Dim Buf(99, 99) as Byte

 Call CopyMemory(Buf(0, 0), ByVal ptr, 100* 100)

 とします。

基本的にはVBでポインタ的な扱いはしない方が良いとは思いますが、画像処理用ライブラリには画像データをポインタで渡すようになっていたり、画像データ用のメモリを何画面分確保すれば良いのか?事前に分からない場合などは、どうしてもポインタで管理したくなる場合もあるので、参考まで。


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

ルックアップテーブル(ガンマ補正の例)

 目次ページへ

 

ルックアップテーブル(Lookup Table【略LUT】)は、ある値の答えが必ず1つの値となる場合、あらかじめ答えを計算しておき、配列に格納しておくことで、毎回の計算をすることなく、 配列(テーブル)を参照することで効率的に処理を行う手法です。
画像処理では、コントラスト調整やガンマ補正などによく用いられます。

例えば、ガンマ補正の場合、ガンマ補正値をγ、補正前の輝度値をsrc、
補正後の輝度値をdstとすると、補正式は

   ガンマ補正式

となりますが、この計算を全ての画素に対して処理を行うのは非常に非効率です。
そこで、例えばLUTという配列に、ガンマ補正の計算結果を以下のように格納しておきます。

src01234・・・251252253254255
dst016232832・・・253253254254255

ルックアップテーブル

あとは、各画素に対して、

  dst = LUT[src

という変換をすればよいだけなので、高速に処理を行うことができます。

ガンマ補正処理例

ガンマ補正前
       ガンマ補正前
           ⇓
ルックアップテーブル
      ルックアップテーブル
            ⇓
ガンマ補正後
        ガンマ補正後

他に、二値化処理や、値が0以上や255以下にするためのif 文の代わりなど
にも応用できる場合があるので、処理を高速にしたい時は、このルックアップテーブルが使えるかどうか?検討してみるのもよいでしょう。


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

拡大鏡+プロファイル機能(開発中!)

 目次ページへ

Windows標準の拡大鏡の機能にプロファイル(輝度値のグラフ)とヒストグラムの機能を追加作成中です。
プログラムのイメージはこんな感じ↓

拡大鏡+プロファイル機能

まだまだ作成途中のバグあり状態、動作環境未評価状態ですが、興味があれば
こちら(右ボタンで対象をファイルに保存)からダウンロードしてみて下さい。
WindowsXP,.NET Framework3.0がインストールされている状態では動くみたいです。
動けばラッキー!、動かなければゴメンなさい。
(今回はプログラムの内容が少し本職とかぶるので、実行ファイルのみの公開です。)

機能としては、
●マウスポインタ周りの拡大表示
●内挿法指定(NearestNeighbor, Bilinear, Bicubic, HighQualityBilinear, HighQualityBicubic)
●拡大率設定(0.5, 0.75, 1.0, 1.5, 2.0, 3.0, 5.0, 7.0, 10.0, 15.0, 20.0, 30.0, 50.0)
●ウィンドウがアクティブの状態で「Ctrl+P」でデスクトップキャプチャの停止/開始
●縦横方向(ライン上)の輝度値グラフ表示
●表示領域のヒストグラム
●マウスポインタ位置のR,G,Bそれぞれの輝度値
●表示領域のR,G,Bそれぞれの輝度値の最大値、最小値、平均値

不定期でバージョンアップ予定です。



Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

VB6.0でビットマップファイルを開く

 目次ページへ

以前までVB6.0で画像処理をしていた時に標準的に使っていたビットマップファイルから画像データを取得するプログラムの公開したいと思います。

ビットマップファイル(*.bmp)であれば、モノクロ、カラー、8Bit、16Bitなど、ほぼ全てのビットマップファイルを開くことができると思います。

VB6.0のサンプルプログラムはこんなイメージです。
VB6.0でビットマップファイルを開く

サンプルプログラムはこちら(右クリック⇒対象をファイルに保存)からダウンロードできます。

ビットマップファイルを開くには、ビットマップファイルフォーマットについては事前にご理解下さい。

ビットマップファイルのバイナリデータを取得している部分のプログラムはこんな感じ↓です。

'//---------------------------------------------------------------
'//【関数名 】:LoadBitmapData
'//【処理概要】:ピットマップファイルデータの読込
'//【引数  】:strBitmapFileName  = ビットマップのファイルネーム
'//      :lpFileFeader       = ビットマップファイルのBITMAPFILEHEADER(戻り)
'//      :lpBitsInfo         = ビットマップファイルのBITMAPINFO(戻り)
'//      :lpBits()           = ビットマップファイルの画像データ配列(戻り)
'//【戻り値 】:0 = 正常終了
'//      :-1 = ファイル読込失敗
'//【備考  】:
'//      :
'//---------------------------------------------------------------
Public Function LoadBitmapData(strBitmapFileName As String, lpFileHeader As BITMAPFILEHEADER, lpBitsInfo As BITMAPINFO, lpBits() As Byte) As Long

    Dim i   As Integer
    Dim ret As Long
    Dim No  As Integer
   
    '戻り値の初期値
    LoadBitmapData = -1

    'ファイル名が指定されなかった場合
    If (strBitmapFileName = "") Then Exit Function
   
    If LCase(Right(strBitmapFileName, 3)) = "bmp" Then
        'ファイルがビットマップファイルのとき

        'ビットマップファイルをバイナリで開く
        No = FreeFile()
        Open strBitmapFileName For Binary As #No
       
            Get #No, , lpFileHeader
            If lpFileHeader.bfType <> &H4D42 Then   
' BM
                'ビットマップではない
                MsgBox "ビットマップファイル形式ではありません。"
               
Close
                Exit Function
            End If

            Get #No, , lpBitsInfo.bmiHeader
            With lpBitsInfo.bmiHeader
                If lpFileHeader.bfOffBits <> Len(lpFileHeader) + Len(lpBitsInfo.bmiHeader) Then
'カラーテーブルにデータがあるとき
                   
'8Bit以下の場合カラーテーブルを読み込む
                    Get #No, , lpBitsInfo.bmiColors
               
End If 
                ' バイト数を計算(4バイト単位幅)
       ReDim lpBits(((.biWidth * .biBitCount + 31) \ 32) * 4 - 1, Abs(.biHeight) - 1) As Byte             
            End With 
            ' ピクセルビットのポインタへ移動
            Seek
#No, lpFileHeader.bfOffBits + 1  
 
            Get #No, , lpBits
        Close #No

    End If

    '正常終了
    LoadBitmapData = 0
   
    Exit Function
       
LoadFileError:
   
'エラー処理
    MsgBox "ファイル " & strBitmapFileName & " を読み込めません。"
End Function



Loading...
スポンサーリンク



現在の閲覧者数: / 合計