プログラミングのメモ書きです。日記も兼ねてます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
昨日の続き。
C++とMATLABでタイムアタックしてみた。
条件として、1600x1200のJPEGファイルを読み込んだ状態でスタート。RGBをHSVに変換し、-10<H<10,S>60,V>60の範囲を抜き出す。
PCのスペックは
CPU AMD Athlon 64 X2 Dual 2.01GHz
RAM 960MB
C++コンパイラは、gcc ver 3.3.3
SDLは1.12.10
MATLABは2007b
を使用。
で、結果
C++&SDL
0.325sec
MATLAB+手書きHSV
1.08sec
C++はええなぁ…
ちなみに、手書きHSVっていうのは、MATLAB標準のHSV変換関数だと2秒かかるようになるから。
ただし、相当手抜き実装。
で、これ見た先生が「3倍高速化すればいいんだな?ソースと対象の画像くれ」ってことで、高速化チャレンジするようです。
実験に使ったソース類は続きのところに…
C++とMATLABでタイムアタックしてみた。
条件として、1600x1200のJPEGファイルを読み込んだ状態でスタート。RGBをHSVに変換し、-10<H<10,S>60,V>60の範囲を抜き出す。
PCのスペックは
CPU AMD Athlon 64 X2 Dual 2.01GHz
RAM 960MB
C++コンパイラは、gcc ver 3.3.3
SDLは1.12.10
MATLABは2007b
を使用。
で、結果
C++&SDL
0.325sec
MATLAB+手書きHSV
1.08sec
C++はええなぁ…
ちなみに、手書きHSVっていうのは、MATLAB標準のHSV変換関数だと2秒かかるようになるから。
ただし、相当手抜き実装。
で、これ見た先生が「3倍高速化すればいいんだな?ソースと対象の画像くれ」ってことで、高速化チャレンジするようです。
実験に使ったソース類は続きのところに…
MATLAB用ソース
%speed.m
name='2009_05_14/photo (0).jpg';
E=imread(name);
tic%ストップウオッチ開始
E=int16(E);
%HSV変換
V=max(E,[],3);
R=E(:,:,1);
G=E(:,:,2);
B=E(:,:,3);
minRGB=min(E,[],3);
dRGB=(V-minRGB);
S=255*dRGB./V;
H=60*(int16(V==R).*(B-G)+int16(V==G).*((R-B)+2.*dRGB)+int16(V==B).*((G-R)+4.*dRGB))./dRGB;
%判定
Mask=((H>-10).*(H<10)+(H>350)).*(V>60).*(S>60);
toc%ストップウオッチ停止
imshow(Mask);%判定結果表示
%ここまで
C++用のソースは、ここ(zip)から。SDL,SDL_image(jpeg有効)必須です。ReadMeはないですけど、makeしてTest.exe実行してください。自己責任で。
諸事情により、画像はついていないので、適当に探して使ってください。
%speed.m
name='2009_05_14/photo (0).jpg';
E=imread(name);
tic%ストップウオッチ開始
E=int16(E);
%HSV変換
V=max(E,[],3);
R=E(:,:,1);
G=E(:,:,2);
B=E(:,:,3);
minRGB=min(E,[],3);
dRGB=(V-minRGB);
S=255*dRGB./V;
H=60*(int16(V==R).*(B-G)+int16(V==G).*((R-B)+2.*dRGB)+int16(V==B).*((G-R)+4.*dRGB))./dRGB;
%判定
Mask=((H>-10).*(H<10)+(H>350)).*(V>60).*(S>60);
toc%ストップウオッチ停止
imshow(Mask);%判定結果表示
%ここまで
C++用のソースは、ここ(zip)から。SDL,SDL_image(jpeg有効)必須です。ReadMeはないですけど、makeしてTest.exe実行してください。自己責任で。
諸事情により、画像はついていないので、適当に探して使ってください。
PR
この記事にコメントする