• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+
イイね!
2013年08月18日

Android Paperカメラの核心に触れるパート2

さてさてPaperカメラの第二弾

数学的な話ですが(笑

デジタル2値画像の距離変換について,これまでシティブロック(4近傍)距離とチェスボード(8近傍)距離については高速な方法が提案されていたが,実用上最も重要なユークリッド距離については決定的な方法は知られていなかった.

ところが最近,ShihとWuによって非常に効率的な方法が提案された.この方法は,3x3のウインドウで画像を2回(順方向に1回,逆方向に1回)走査するだけで正確なユークリッド距離変換が求まるという画期的なもので,通常サイズの画像ならほとんど一瞬で距離変換が完了する.

Frank Y. Shih and Yi-Ta Wu, ``Fast Euclidean distance transformation in two scans using a 3 x 3 neighborhood," Computer Vision and Image Understanding, vol.93, no.2, pp.195-205, Feb. 2004.

また,ボクセルデータなどの3次元画像への拡張も既に同著者によってなされている.

なんのこっちゃ??いやいや、実は
こんな画像を作るのに必要なのですが・・・・・・・
画像の輪郭を描画するのにユークリッド距離を計算するんですが、平方根の計算があるので計算に時間がかかってしまいます。

上記の理論を適用すると
640x480の画像は614400回も計算が必要になります。

じゃあどうするの???

全部足し算と引き算で計算するのです。

こんな感じ

int min, max;
if ( workx < 0 ) workx = -workx;
if ( worky < 0 ) worky = -worky;
if ( workx < worky )
{
min = workx;
max = worky;
} else {
min = worky;
max = workx;
}

int total1=((( max << 8 ) + ( max << 3 ) - ( max << 4 ) - ( max << 1 ) +
( min << 7 ) - ( min << 5 ) + ( min << 3 ) - ( min << 1 )) >> 8 );

if ( workx2 < 0 )
    workx2 = -workx2;
if ( worky2 < 0 )
workrky2 = -worky2;

if ( workx2 < worky2 )
{
min = workx2;
max = worky2;
}
else
{
min = worky2;
max = workx2;
}

int total2=((( max << 8 ) + ( max << 3 ) - ( max << 4 ) - ( max << 1 ) +
( min << 7 ) - ( min << 5 ) + ( min << 3 ) - ( min << 1 )) >> 8 );
r=(total1+total2);
//rは距離、エッジ強度を2とすれば(total1+total2)/2*2=total1+total2と簡略出来る
これならば半分の時間で計算出来ます。

でもですね、この計算はカメラデータyuvをRGBに変換してエッジ計算すると

Galaxy S2(2CPU)で30ms

Galaxy S3(4CPU)で20msかかっちゃいます。


エフェクトするのにちょっと厳しいせめて10msで完了しないとダメダメ

で次に行うのが並列処理

カメラからYUVデータが来たらRGB変換とエッジ処理

エフェクトはあらかじめ並列処理が完了したエッジデータを使用すればいいのですが・・・・


これでも厳しい~

じゃあPaperカメラは??どうやってんの????


この答は次回で(笑


おまけ:激重い計算プログラム(参考にしちゃダメですよん)
見てのとおりループ計算のオンパレード
計算時間は加算・引き算<掛け算<割さん<平方根の順にクソ重くなる
(short)rint(sqrt(workx*workx+worky*worky))なんて計算したら使い物になりゃしません
エレガントに足し算・引き算・ビットシフトで計算すいりゃ平方根も必要ありません


通常の計算方法
double Wx[3][3] ={{-base1,base3,base1},
{-base2,base4,base2},
{-base1,base3,base1}} ;
double Wy[3][3] ={{-base1,-base2,-base1},
{base3,base4,base3},
{base1,base2,base1}} ;

double Wx2[3][3] ={{0,0,0},
{0,1,0},
{0,0,-1}} ;
double Wy2[3][3] ={{0,0,0},
{0,0,1},
{0,-1,0}} ;
for(i=1;i {
for(j=1;j {
int a, aa, r, rr, g, gg , b, bb, counts,glay;
a = aa = r = rr = g = gg = b = bb = counts = 0;
for(ii=-1;ii<2;ii++)
{
for(jj=-1;jj<2;jj++)
{
   aa = pixelsSrc[(i+ii) + (j+jj) * width ] & 0xFF000000;
    r = pixelsSrc[(i+ii) + (j+jj) * width ] & 0x00FF0000;
     r = r >> 16;
     g = pixelsSrc[(i+ii) + (j+jj) * width ] & 0x0000FF00;
     g = g >> 8;
     b = pixelsSrc[ (i+ii) + (j+jj) * width ] & 0x000000FF;

  f[ii+1][jj+1]=r;
}
}
workx =0.0 ;
worky =0.0 ;
for(ii=0;ii<3;ii++)
{
       for(jj=0;jj<3;jj++)
    {
workx += Wx[ii][jj]*f[jj][ii] ;
    }
}
for(ii=0;ii<3;ii++)
{
    for(jj=0;jj<3;jj++)
    {
worky += Wy[ii][jj]*f[jj][ii] ;
    }
}
workx2 =0.0 ;
worky2 =0.0 ;
for(ii=0;ii<3;ii++)
{
for(jj=0;jj<3;jj++)
{
workx2 += Wx2[ii][jj]*f[jj][ii] ;
}
}
for(ii=0;ii<3;ii++)
{
for(jj=0;jj<3;jj++)
{
worky2 += Wy2[ii][jj]*f[jj][ii] ;
}
}


int total1=(short)rint(sqrt(workx*workx+worky*worky));
int total2=(short)rint(sqrt(workx2*workx2+worky2*worky2));
r=(total1+total2)/2*shickness_lebel;
ブログ一覧 | 音楽/映画/テレビ
Posted at 2013/08/18 21:47:07

イイね!0件



今、あなたにおすすめ

ブログ人気記事

夜は涼しい?
伯父貴さん

デリカミニのモデルチェンジか!
モモコロンCX-30さん

2025年8月の「トミカ」(*´ω ...
badmintonさん

栃木で食べ歩きなお散歩
fuku104さん

こんなこと(画像)、しゃべってるん ...
P.N.「32乗り」さん

ホンダカーズのトミカもらえるキャン ...
Iichigoriki07さん

この記事へのコメント

コメントはありません。

プロフィール

「[整備] #クラウンハイブリッド 220クラウンに取り付けたDSPによるエンジン音爆音化対策 https://minkara.carview.co.jp/userid/552794/car/2584349/8332236/note.aspx
何シテル?   08/14 14:04
アイコンもなくUNNOWNな人や,ブログ・整備手帳も全くない不気味な方、女子と勘違いされてフォロー申請された方は 「絶対にフォローしません」 臭いで分かりま...
みんカラ新規会員登録

ユーザー内検索

<< 2025/8 >>

     12
3456789
1011121314 15 16
17181920212223
24252627282930
31      

リンク・クリップ

KICKER L7TDF12 
カテゴリ:その他(カテゴリ未設定)
2025/05/10 11:45:11
MAXWINドラレコカメラ修理 
カテゴリ:その他(カテゴリ未設定)
2025/05/03 06:00:24
BSM取付 
カテゴリ:その他(カテゴリ未設定)
2025/02/08 01:18:22

愛車一覧

トヨタ クラウンハイブリッド ジャイ子2号 (トヨタ クラウンハイブリッド)
新型クラウンです 納車2018 7月初旬工場出荷 納車されました 車体は1000番の初期 ...
トヨタ プリウス トヨタ プリウス
クラウンが雪害で破損したための代車
ダイハツ タフト よっこら正一 (ダイハツ タフト)
買い物下駄に注文しちゃったぜ 大雪にはクラウンは、もったいないってことで
トヨタ ルーミー 下駄 (トヨタ ルーミー)
下駄です!あくまでも下駄(笑 Dのオネーたまの甘い誘惑に騙され、近所の買い物に発表1か月 ...

過去のブログ

2025年
01月02月03月04月05月06月
07月08月09月10月11月12月
2024年
01月02月03月04月05月06月
07月08月09月10月11月12月
2023年
01月02月03月04月05月06月
07月08月09月10月11月12月
2022年
01月02月03月04月05月06月
07月08月09月10月11月12月
2021年
01月02月03月04月05月06月
07月08月09月10月11月12月
2020年
01月02月03月04月05月06月
07月08月09月10月11月12月
2019年
01月02月03月04月05月06月
07月08月09月10月11月12月
2018年
01月02月03月04月05月06月
07月08月09月10月11月12月
2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
2015年
01月02月03月04月05月06月
07月08月09月10月11月12月
2014年
01月02月03月04月05月06月
07月08月09月10月11月12月
2013年
01月02月03月04月05月06月
07月08月09月10月11月12月
2012年
01月02月03月04月05月06月
07月08月09月10月11月12月
2011年
01月02月03月04月05月06月
07月08月09月10月11月12月
2010年
01月02月03月04月05月06月
07月08月09月10月11月12月
2009年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ

あなたの愛車、今いくら?

複数社の査定額を比較して愛車の最高額を調べよう!

あなたの愛車、今いくら?
メーカー
モデル
年式
走行距離(km)
© LY Corporation