私は、モバイル、PC、PSPなどのあらゆるデバイスに適した、さまざまな解像度で同じ画像の多くのファイルを持っています。今、私はページ内のユニークな画像だけを表示しようとしています。私は最初にデータベースを管理していればこれを避けることができたかもしれませんが、私はしませんでした。そして私はあなたの助けが最大のユニークな写真を検出する必要があります。PHPで類似の画像を検出するには?
答えて
まあ、でもあなた、私はまだ手動でそれを行うには速いだろうと考えている、ことを行うにはかなりの数のアルゴリズムがあります。すべての画像をダウンロードして、Windows Liveフォトギャラリーや類似の画像と一致する他のソフトウェアのようなものにそれらを供給します。 これには数時間かかりますが、イメージマッチングアルゴリズムを実装するにははるかに時間がかかることがあります。その後、現在のシステムを修正してすべてをDBに保存するために余分な時間を費やすことができます。 問題の原因を修正しました。症状ではありません。
質問は "なぜあなたはPHPで類似の画像を検出してはいけないのでしょうか?"ということではありません。なぜPHPで画像を比較する必要があるのかを知ることはできません。それを手動で行うと言っても、実際の質問に対する良い答えではありません。 –
2つの画像のうち、最も小さい画像を確認し、その画像のサイズを取ってから、矩形サイズ内のピクセルのみを比較してください。
まず、あなたの問題はPHPとはほとんど関係がないので、そのタグを削除してより関連性の高いタグを追加しました。
NxNの比較は必要ありません。あなたは、ヒューリスティックの多くを使用することができますが、最初に私がお聞きしたいと思います:
1つの画像のすべてのコピーが正確に行われ、いくつかのトリミングがある(互いのサイズを変更しています - マッチングは元に画像をトリミングすることができより困難で時間がかかる)?
同じツールを使用してすべての画像が生成(サイズ変更)されていますか?
サイズ変更に使用したパラメータはどうですか?たとえば、PSPで同じ解像度で表示するすべての写真はありますか?
あなたが持っているユニークな画像の数はどれくらいですか(つまり、各画像のコピーの平均数は?)
既に分類が行われていますか。たとえば、すべてのモバイルイメージは別のフォルダにありますか(またはPCイメージとは異なる解像度)ですか?これだけで比較の回数を減らすことができます。
あなたはN×N個のcomparisionsを必要としない理由について非常にトップレベルのヒント:あなたは、多くの異なる概算(例えば、高/低周波JPEG係数の分布)のハッシュとグループに「潜在的」類似イメージを考案することができます一緒に。これは、使用されるヒューリスティックの質およびデータセットに依存して、必要とされる比較の数を10〜100倍またはそれ以上に減らすことができる。ハッシングは、画像の一部でも実行できます。あなたが正しい技法を使用するならば、30000は非常に大きな数字ではありません。
はい、クロップされてサイズが変更されました。画像は480x272,800x600,1024x768,1280x 1024,1600x1200,1600x1080,1920x1080,1920x1200 、2560 x 1600。各写真には約3500の固有のイメージがあり、正確なコピーは約9つあります。分類について...私はそれぞれ約1000枚の写真を含む約30のフォルダにこれらの画像を配置しました。サイズ制限を超えるとフォルダが作成されて配置され、ファイル名はランダムになって別の画像が表示されます。 – mrN
その後、各フォルダから約20の画像をランダムに選択し、ファイルリストを作成します。次に、サイズに応じて画像をソートし、それぞれのデバイスに自動的にコピーする機能を実行します。 – mrN
アップロード時にトリミングアルゴリズムが自動的に実行されます。高さに合わせてサイズを変更し、画像を中央に配置します特定の解像度まで、私は通常2560 x 1600の画像サイズを提供します。もし私が大きな画像をアップロードした場合、最初に2560 x 1600の画像が撮影され、元の画像は破棄されます。 – mrN
gd2とlib puzzleをサーバーにインストールします。
リビングパズルは驚くほど簡単で、遊びやすいです。このスニペットをチェック
<?php
# Compute signatures for two images
$cvec1 = puzzle_fill_cvec_from_file('img1.jpg');
$cvec2 = puzzle_fill_cvec_from_file('img2.jpg');
# Compute the distance between both signatures
$d = puzzle_vector_normalized_distance($cvec1, $cvec2);
# Are pictures similar?
if ($d < PUZZLE_CVEC_SIMILARITY_LOWER_THRESHOLD) {
echo "Pictures are looking similar\n";
} else {
echo "Pictures are different, distance=$d\n";
}
# Compress the signatures for database storage
$compress_cvec1 = puzzle_compress_cvec($cvec1);
$compress_cvec2 = puzzle_compress_cvec($cvec2);
<?php
/*
Project: detect similar Images in PHP
Project url: http://www.cricbell.com
Author: Ali Kodor Zoarder,Bangladesh
Version: 1.0.0
*/
$img=new image_match;
if($img->is_match('z.jpg','y.jpg')){
echo 'same image';
}else{
echo 'different image';
}
class image_match{
/**
* Function image byte code othoba jpeg image show korbe
* @param string $base sotik jpeg image hote hobe
* @param string $W sotik image width hote hobe
* @param string $H sotik image height hote hobe
* @param string $show true or false
* @return jpeg image
*/
public function create($base,$W=40,$H=40,$show=false){
if($show==true){
header('Content-type: image/jpeg');
header('Cache-Control: public');
header('Pragma: cache');
}
list($wn,$hn) = getimagesize($base);
$base_image = imagecreatefromjpeg($base);
$new = imageCreateTrueColor($W, $H);
imageCopyResampled($new, $base_image, 0, 0, 0, 0, $W, $H, $wn, $hn);
//imagejpeg($base_image);
imageJpeg($new,null,100);
imagedestroy($new);
}
/**
* Function ek rokom image ki na ,seta zachai korbe
* @param string $img_s_a sotik jpeg image hote hobe
* @param string $img_s_b sotik jpeg image hote hobe
* @return :true=motlob mil ase::false=motlob mil nei:
*/
public function is_match($img_s_a,$img_s_b){
ob_start();
$this->create($img_s_a,$W=40,$H=40,$show=false);
$ia=ob_get_clean();
ob_start();
$this->create($img_s_b,$W=40,$H=40,$show=false);
$ib=ob_get_clean();
//echo md5($ia);
if(preg_match('/'.md5($ia).'/' , md5($ib))){
return true;
}else{
return false;
}
}
}
- 1. クロップド類似画像の検索
- 2. 類似の画像を検出するアルゴリズムの実装はありますか?
- 3. 類似画像を識別するライブラリー
- 4. 類似のコード検出器
- 5. 画像に類似した図
- 6. 非常に類似した画像のための画像ハッシュ
- 7. 類似度の画像の比較
- 8. PHP/MYSQLで同様の投稿型スクリプト(類似の画像)を作成する
- 9. 画像の類似度を考慮しない画像類似度ライブラリを探す
- 10. 類似の色の画像を見つける
- 11. Google画像検索に似た画像ギャラリーを実装する方法
- 12. 画像に適用されたコサイン類似度尺度
- 13. PHPを使用して画像の色を検出する
- 14. PHPの出力画像は
- 15. gitはリネームの検出のために類似のファイルをどのように検出しますか?
- 16. php類似のフレーズを見つける
- 17. 2つの画像が類似しているかどうかを検出するにはどうすればよいですか?
- 18. カラー画像から類似色ドットの数を抽出してカウントする方法は?
- 19. PHPによる画像アップロードの検証
- 20. PHPで画像内の主要な色を検出
- 21. SIFT- 2つ以上の画像で類似点を見つける方法
- 22. 類似検索と意味検索
- 23. データベースPHP/MySQLの類似検索文字列
- 24. java内の2つの画像の間に知覚的類似点がある
- 25. PHPを使用して2つの画像の類似度を計算する方法
- 26. 郵送先住所の類似性の検出
- 27. 画像ビューのタッチ検出
- 28. Pythonの画像スポット検出
- 29. 画像画像間の類似度の割合を見つけるための比較
- 30. Jquery PHPスクロールの問題。 div内の画像を検出する方法は?
名にさえ類似性がありませんか?さもなければ、N:M比較状況で、おそらくそれがあなたを助けることができる(あなたがトリックを行うアルゴリズムを見つけるならば)終わるだろう。http://stackoverflow.com/questions/2037205/image-comparison-with-php-gdしかし、覚えておいてください。最初の場所にいなかった場合は、データベースの維持を開始する画像が1000個ある場合は、999999の比較操作 – Hannes
を開始してください。あなたが過去に間違いを犯してしまったとしても、間違いを回避するためにコード/ –
うわー、これはCPUサイクルの点で非常に高価になるでしょう。最初に使用したのと同じアルゴリズムを使用して、すべての画像Aを縮小する必要があります(Aは、2つの画像のうち大きい方の画像です)。縮小されたAとBが同等であれば、その情報を何らかの形で保存し、次のペアを続行します。これはO(N²)である可能性があるので、大量のデータを扱う場合は2度考えるべきです。私はあなたのデータベースを修正する必要がありますと思います。どんなものでも。 – jwueller