2008/01/31
カテゴリ : Tech
SeamCarving
画像処理
エクステション
Seam Carvingで自然に画像をリサイズするPHPエクステンション
以前に紹介したSeam Carvingという技術を使用したプログラムをPHPエクステンションで実装してみました。
実験的なものなのでご利用は自己責任でお願いします。
少し前の話題となってしまいますが、Seam Carvingを使用した画像のリサイズが話題になりました。
オンラインサービスでresizrというものまで出てきているようです。
ロジック自体は単純なので割とすぐにPHPで実装できたのですが、パフォーマンスが最悪だったのです。
そこで、PHPエクステンションなら何となるかなと思いトライしてみました。
seam_carving.tar.gz
※ cocoiti さんの指摘を修正しました。ご指摘ありがとうございます!
以下のように画像を縮小することができます。
元画像(1024×768)
768×768
かなりスムーズなリサイズです。
512×768
半分になっても意外と大丈夫ですね。
256×768
さすがに4分の1にまで縮小すると汚くなってしまいます。
エクステンション自体のインストールはtar.gzを解凍して、phpize、configure、make とします。
modulesディレクトリにseam_carving.soができあがるので make install でインストールするなり、どこかのディレクトリにおいておきます。
準備ができたら、以下のようにしてリサイズします。
画像のリサイズは seam_imagecreate関数で実行します。第1引数がGDの画像リソースで、第2引数が横方向にカットするピクセル数です。
マシンスペックにもよると思いますが、1024×768の画像を1秒で10ピクセルくらいずつカットすることができました。
これでもずいぶんとPHPプログラムでの実装よりは高速になっています。エクステンションのコードを修正すれば、まだまだ高速化できると思います。
まだまだエクステンションの書き方がわかっていないので、エラー処理ができていません。異常終了したりするかもしれません。。
そこら辺は多めに見てください^^;
実験的なものなのでご利用は自己責任でお願いします。
少し前の話題となってしまいますが、Seam Carvingを使用した画像のリサイズが話題になりました。
オンラインサービスでresizrというものまで出てきているようです。
ロジック自体は単純なので割とすぐにPHPで実装できたのですが、パフォーマンスが最悪だったのです。
そこで、PHPエクステンションなら何となるかなと思いトライしてみました。
seam_carving.tar.gz
※ cocoiti さんの指摘を修正しました。ご指摘ありがとうございます!
以下のように画像を縮小することができます。
元画像(1024×768)
768×768
かなりスムーズなリサイズです。
512×768
半分になっても意外と大丈夫ですね。
256×768
さすがに4分の1にまで縮小すると汚くなってしまいます。
エクステンション自体のインストールはtar.gzを解凍して、phpize、configure、make とします。
- $
tar xzf seam_carving.tar.gz - $
cd seam_carving - $
phpize - $
./configure - $
make
modulesディレクトリにseam_carving.soができあがるので make install でインストールするなり、どこかのディレクトリにおいておきます。
準備ができたら、以下のようにしてリサイズします。
- dl('seam_carving.so');
- $im
= imagecreatefromjpeg('Antelope.jpg'); - $new_im
= seam_imagecreate($im, 100);
画像のリサイズは seam_imagecreate関数で実行します。第1引数がGDの画像リソースで、第2引数が横方向にカットするピクセル数です。
マシンスペックにもよると思いますが、1024×768の画像を1秒で10ピクセルくらいずつカットすることができました。
これでもずいぶんとPHPプログラムでの実装よりは高速になっています。エクステンションのコードを修正すれば、まだまだ高速化できると思います。
まだまだエクステンションの書き方がわかっていないので、エラー処理ができていません。異常終了したりするかもしれません。。
そこら辺は多めに見てください^^;
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













今日の朝食会で、seam curving の理論を
3次元に応用したケースについての発表がありました。
特徴点抽出の技術とかだいぶ世の中進んでるみたいですね。
こういう話に触れるといろいろと作ってみたいものが出てきます。
Webサイトの特徴抽出みたいなものは実際に研究が
行われているみたいです。
使ってみました。非常に面白いです。
ただ、seam_varving.cの
if (gdImageSX(im) > (len * 3 / 2) {
RETURN_FALSE;
}
あたりが微妙に間違ってる気がします。
とりあえず、そこは削って、使ってみてます。
たしかに Voxel でやってみてもおもしろそうですね。面での微分とか最小面の計算とかは単純なものでも以外とよさそうだけど、工夫してもおもしろいのかもしれません。
というか、VOXELではなくてポリゴン状態で計算するのかな。だとしたら結構すごいですね。僕の作ったものをベクトル画像に対して応用するだけでも大変そうです。
> cocoitiさん
すいません。。。思いっきり間違えていました。。
すぐ修正します。