Revision: 47299
Updated Code
at June 4, 2011 09:09 by pablobablo
Updated Code
class Hamming
{
private function _resizeImage($from_file, $to_file, $width, $height, $quality)
{
$img1 = imagecreatefromjpeg($from_file);
$img2 = imagecreatetruecolor($width, $height);
imagecopyresampled($img2, $img1, 0, 0, 0, 0, $width, $height, imagesx($img1), imagesy($img1));
imagejpeg($img2, $to_file, $quality);
imagedestroy($img1);
imagedestroy($img2);
}
private function _grayScaleImage($filename)
{
$img_size = getimagesize($filename);
$width = $img_size[0];
$height = $img_size[1];
$img = imagecreate($width,$height);
for ($c = 0; $c < 256; $c++)
{
imagecolorallocate($img, $c, $c, $c);
}
$img2 = imagecreatefromjpeg($filename);
imagecopymerge($img,$img2,0,0,0,0, $width, $height, 100);
imagejpeg($img, $filename);
imagedestroy($img);
}
private function _getPixelValue($filename, $x, $y)
{
$image = imagecreatefromjpeg($filename);
$color = imagecolorat($image, $x, $y);
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
imagedestroy($image);
return array('r'=>$r, 'g'=>$g, 'b'=>$b);
}
private function _getChainOfBits($image)
{
$tmpfile = sys_get_temp_dir() . uniqid(md5(rand()), true) . '.jpg';
$this->_resizeImage($image, $tmpfile, 8, 8, 100);
$this->_grayScaleImage($tmpfile);
$a = array();
for($i=0; $i<8; $i++)
{
for($j=0; $j<8; $j++)
{
$rgb = $this->_getPixelValue($tmpfile, $i, $j);
$a[] = $rgb['r'];
}
}
$avrg = (int)(array_sum($a) / count($a));
$s = '';
foreach ($a as $value)
{
$s .= ($value > $avrg ? '0' : '1');
}
unlink($tmpfile);
return $s;
}
public function getDistance($image1, $image2)
{
$bits1 = $this->_getChainOfBits($image1);
$bits2 = $this->_getChainOfBits($image2);
$distance = 0;
for($i=0; $i<64; $i++)
{
$bit1 = $bits1[$i];
$bit2 = $bits2[$i];
if ( $bit1 != $bit2 )
{
$distance++;
}
}
return $distance;
}
}
$hamming = new Hamming();
$distance = $hamming->getDistance('image-1.jpg', 'image-2.jpg');
echo $distance;
Revision: 47298
Updated Code
at June 4, 2011 08:59 by pablobablo
Updated Code
class Hamming
{
private function _resizeImage($from_file, $to_file, $width, $height, $quality)
{
$img1 = imagecreatefromjpeg($from_file);
$img2 = imagecreatetruecolor($width, $height);
imagecopyresampled($img2, $img1, 0, 0, 0, 0, $width, $height, imagesx($img1), imagesy($img1));
imagejpeg($img2, $to_file, $quality);
imagedestroy($img1);
imagedestroy($img2);
}
private function _grayScaleImage($filename)
{
$img_size = getimagesize($filename);
$width = $img_size[0];
$height = $img_size[1];
$img = imagecreate($width,$height);
for ($c = 0; $c < 256; $c++)
{
imagecolorallocate($img, $c, $c, $c);
}
$img2 = imagecreatefromjpeg($filename);
imagecopymerge($img,$img2,0,0,0,0, $width, $height, 100);
imagejpeg($img, $filename);
imagedestroy($img);
}
private function _getPixelValue($filename, $x, $y)
{
$image = imagecreatefromjpeg($filename);
$color = imagecolorat($image, $x, $y);
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
imagedestroy($image);
return array('r'=>$r, 'g'=>$g, 'b'=>$b);
}
private function _getChainOfBits($image)
{
$tmpfile = sys_get_temp_dir() . uniqid(md5(rand()), true) . '.jpg';
$this->_resizeImage($image, $tmpfile, 8, 8, 100);
$this->_grayScaleImage($tmpfile);
$a = array();
for($i=0; $i<8; $i++)
{
for($j=0; $j<8; $j++)
{
$rgb = $this->_getPixelValue($tmpfile, $i, $j);
$a[] = $rgb['r'];
}
}
$avrg = (int)(array_sum($a) / count($a));
$s = '';
foreach ($a as $value)
{
$s .= ($value > $avrg ? '0' : '1');
}
unlink($tmpfile);
return $s;
}
public function getDistance($image1, $image2)
{
$bits1 = $this->_getChainOfBits($image1);
$bits2 = $this->_getChainOfBits($image2);
$distance = 0;
for($i=0; $i<64; $i++)
{
$bit1 = $bits1[$i];
$bit2 = $bits2[$i];
if ( $bit1 != $bit2 )
{
$distance++;
}
}
return $distance;
}
}
// How to use?
$hamming = new Hamming();
$distance = $hamming->getDistance('image-1.jpg', 'image-2.jpg');
echo $distance;
Revision: 47297
Updated Code
at June 4, 2011 08:58 by pablobablo
Updated Code
class Hamming
{
private function _resizeImage($from_file, $to_file, $width, $height, $quality)
{
$img1 = imagecreatefromjpeg($from_file);
$img2 = imagecreatetruecolor($width, $height);
imagecopyresampled($img2, $img1, 0, 0, 0, 0, $width, $height, imagesx($img1), imagesy($img1));
imagejpeg($img2, $to_file, $quality);
imagedestroy($img1);
imagedestroy($img2);
}
private function _grayScaleImage($filename)
{
$img_size = getimagesize($filename);
$width = $img_size[0];
$height = $img_size[1];
$img = imagecreate($width,$height);
for ($c = 0; $c < 256; $c++)
{
imagecolorallocate($img, $c, $c, $c);
}
$img2 = imagecreatefromjpeg($filename);
imagecopymerge($img,$img2,0,0,0,0, $width, $height, 100);
imagejpeg($img, $filename);
imagedestroy($img);
}
private function _getPixelValue($filename, $x, $y)
{
$image = imagecreatefromjpeg($filename);
$color = imagecolorat($image, $x, $y);
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
imagedestroy($image);
return array('r'=>$r, 'g'=>$g, 'b'=>$b);
}
private function _getChainOfBits($image)
{
$tmpfile = sys_get_temp_dir() . uniqid(md5(rand()), true) . '.jpg';
$this->_resizeImage($image, $tmpfile, 8, 8, 100);
$this->_grayScaleImage($tmpfile);
$a = array();
for($i=0; $i<8; $i++)
{
for($j=0; $j<8; $j++)
{
$rgb = $this->_getPixelValue($tmpfile, $i, $j);
$a[] = $rgb['r'];
}
}
$avrg = (int)(array_sum($a) / count($a));
$s = '';
foreach ($a as $value)
{
$s .= ($value > $avrg ? '0' : '1');
}
unlink($tmpfile);
return $s;
}
public function getDistance($image1, $image2)
{
$bits1 = $this->_getChainOfBits($image1);
$bits2 = $this->_getChainOfBits($image2);
$distance = 0;
for($i=0; $i<64; $i++)
{
$bit1 = $bits1[$i];
$bit2 = $bits2[$i];
if ( $bit1 != $bit2 )
{
$distance++;
}
}
return $distance;
}
}
$hamming = new Hamming();
$distance = $hamming->getDistance('image-1.jpg', 'image-2.jpg');
echo $distance;
Revision: 47296
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at June 4, 2011 08:57 by pablobablo
Initial Code
class Hamming
{
private function _resizeImage($from_file, $to_file, $width, $height, $quality)
{
$img1 = imagecreatefromjpeg($from_file);
$img2 = imagecreatetruecolor($width, $height);
imagecopyresampled($img2, $img1, 0, 0, 0, 0, $width, $height, imagesx($img1), imagesy($img1));
imagejpeg($img2, $to_file, $quality);
imagedestroy($img1);
imagedestroy($img2);
}
private function _grayScaleImage($filename)
{
$img_size = getimagesize($filename);
$width = $img_size[0];
$height = $img_size[1];
$img = imagecreate($width,$height);
for ($c = 0; $c < 256; $c++)
{
imagecolorallocate($img, $c, $c, $c);
}
$img2 = imagecreatefromjpeg($filename);
imagecopymerge($img,$img2,0,0,0,0, $width, $height, 100);
imagejpeg($img, $filename);
imagedestroy($img);
}
private function _getPixelValue($filename, $x, $y)
{
$image = imagecreatefromjpeg($filename);
$color = imagecolorat($image, $x, $y);
$r = ($color >> 16) & 0xFF;
$g = ($color >> 8) & 0xFF;
$b = $color & 0xFF;
imagedestroy($image);
return array('r'=>$r, 'g'=>$g, 'b'=>$b);
}
private function _getChainOfBits($image)
{
$tmpfile = sys_get_temp_dir() . uniqid(md5(rand()), true) . '.jpg';
$this->_resizeImage($image, $tmpfile, 8, 8, 100);
$this->_grayScaleImage($tmpfile);
$a = array();
for($i=0; $i<8; $i++)
{
for($j=0; $j<8; $j++)
{
$rgb = $this->_getPixelValue($tmpfile, $i, $j);
$a[] = $rgb['r'];
}
}
$avrg = (int)(array_sum($a) / count($a));
$s = '';
foreach ($a as $value)
{
$s .= ($value > $avrg ? '0' : '1');
}
unlink($tmpfile);
return $s;
}
public function getDistance($image1, $image2)
{
$bits1 = $this->_getChainOfBits($image1);
$bits2 = $this->_getChainOfBits($image2);
$distance = 0;
for($i=0; $i<64; $i++)
{
$bit1 = $bits1[$i];
$bit2 = $bits2[$i];
if ( $bit1 != $bit2 )
{
$distance++;
}
}
return $distance;
}
}
$hamming = new Hamming();
$distance = $hamming->getDistance('image-1.jpg', 'image-2.jpg');
echo $distance;
Initial URL
http://habrahabr.ru/blogs/image_processing/120562/
Initial Description
КлаÑÑ Ð´Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð²ÑƒÑ… изображений. Возвращает раÑÑтоÑние Ð¥Ñмминга. Подробнее можно почитать здеÑÑŒ: http://habrahabr.ru/blogs/image_processing/120562/
Initial Title
Как определить ÑходÑтво двух изображений
Initial Tags
Initial Language
PHP