使用php比较图像相似度

时间:2015-06-25 05:15:47

标签: php windows image-comparison

我正在寻找一种识别相同大小的类似png图像的方法。图像不是完全相同的重复。例如,如果一个图像具有鸟的剪贴画,而另一个图像具有相同的剪贴画但是它被旋转,我想识别它们两者是相似的。我想写一个算法使用php做这个。我已经尝试使用javasript。我正在做的是将图像转换为base64并使用汉明距离比较两个值。但据我所知,这不会识别诸如缩放,旋转等高级技术。所以我想要它写一个算法来在php.Any想法做那些事情?这是我尝试使用javascript和html5画布。

  function newFunction()
{

    var imageHeight = image.naturalHeight;
    var imageWidth = image.naturalWidth;
    var image2Height = image2.naturalHeight;
    var image2Width = image2.naturalWidth;
    var data3=[];


    var imageData = context.getImageData(0,0,imageWidth,imageHeight);
    var image2Data = context2.getImageData(0,0,image2Width,image2Height);

    var data = imageData.data;
    var data2 = image2Data.data;


    function _arrayBufferToBase64( buffer ) {
        var binary = '';
        var bytes = new Uint8Array( buffer );
        var len = bytes.byteLength;
        for (var i = 0; i < len; i++) {
            binary += String.fromCharCode( bytes[ i ] );
        }
        return window.btoa( binary );
    }





      //str = String.fromCharCode.apply(null, data); // "ÿ8É"
        // str2 = String.fromCharCode.apply(null, data2); // "ÿ8É"
// to Base64
        b64 = _arrayBufferToBase64(data);
        b64_2 = _arrayBufferToBase64(data2 );
        console.log("64 base"+b64_2);


//
        var toReturn = 0;
        var firstBytes =new Uint8Array(1024);
        var secondBytes=new Uint8Array(1024);
        var different=new Uint8Array(1024);

//        firstBytes = Convert.FromBase64String(first64);
//        secondBytes = Convert.FromBase64String(second64);
        different = 0;

        var mylength;

        if(b64.length>b64_2.length)
        {
            mylength=b64.length;
        }
        else
        {
            mylength=b64_2.length;
        }

        for (var index = 0; index < mylength; index++) {
            different = (b64[index] ^ b64_2[index]);

            while (different != 0) {
                toReturn++;
                different &= different - 1;
            }
        }

        var percentage=(toReturn/((image2Height*image2Width)*2))*100;
        if(percentage >=100)
        {
            percentage=100;
        }
        alert("Difference is "+percentage+" to return" +toReturn + " data1 length"+data.length+ " data2 length"+data2.length);


    }

此功能运行良好,没有任何错误。但它不会识别诸如缩放和旋转等高级功能。给我一些想法如何使用PHP。

0 个答案:

没有答案