1. 程式人生 > >OpenCV 影象相似度匹配之感知雜湊演算法

OpenCV 影象相似度匹配之感知雜湊演算法

   參考Neal Krawetz博士的這篇文章, 實現這種功能的關鍵技術叫做"感知雜湊演算法"(Perceptual Hash Algorithm), 意思是為圖片生成一個指紋(字串格式), 兩張圖片的指紋越相似, 說明兩張圖片就越相似. 但關鍵是如何根據圖片計算出"指紋"呢? 下面用最簡單的步驟來說明一下原理:

第一步 縮小圖片尺寸

        將圖片縮小到8x8的尺寸, 總共64個畫素. 這一步的作用是去除各種圖片尺寸和圖片比例的差異, 只保留結構、明暗等基本資訊.

        

第二步 轉為灰度圖片

         將縮小後的圖片, 轉為64級灰度圖片.

        

第三步 計算灰度平均值

         計算圖片中所有畫素的灰度平均值

第四步 比較畫素的灰度

        將每個畫素的灰度與平均值進行比較, 如果大於或等於平均值記為1, 小於平均值記為0.

第五步 計算雜湊值

         將上一步的比較結果, 組合在一起, 就構成了一個64位的二進位制整數, 這就是這張圖片的指紋.

第六步 對比圖片指紋

        得到圖片的指紋後, 就可以對比不同的圖片的指紋, 計算出64位中有多少位是不一樣的. 如果不相同的資料位數不超過5, 就說明兩張圖片很相似, 如果大於10, 說明它們是兩張不同的圖片.


相關推薦

OpenCV 影象相似匹配感知演算法

   參考Neal Krawetz博士的這篇文章, 實現這種功能的關鍵技術叫做"感知雜湊演算法"(Perceptual Hash Algorithm), 意思是為圖片生成一個指紋(字串格式), 兩張圖片的指紋越相似, 說明兩張圖片就越相似. 但關鍵是如何根據圖片計算出"指紋"呢? 下面用最簡單的步驟來說

圖片相似判斷-差異值演算法JAVA版

差異值雜湊演算法(dHash) 圖片縮放為9*8大小 將圖片灰度化 差異值計算(每行相鄰畫素的差值,這樣會生成8*8的差值,前一個畫素大於後一個畫素則為1,否則為0) 生成雜湊值 package com.example.demo.hello; import jav

opencv影象相似的計算方法

// PSNR.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> // Console I/O #include <sstream>

感知演算法對比圖片相似

package com.willson.common.utils; import javax.imageio.ImageIO; import java.awt.*; import java.awt.color.ColorSpace; import java.awt.image

影象檢索--感知演算法

瞭解決上面方法對儲存空間和檢索時間的不切實際的要求,近年來近似最近鄰搜尋(approximate nearest neighbor search)技術發展迅猛,因為其對空間和時間的需求大幅降低,而且能夠得到不錯的檢索結果,因此成為了一種實用的替代方案。在這其中,雜湊(hashing)作為一種代表性方

谷歌百以圖搜圖 "感知演算法" C#簡單實現

/// <summary> /// 感知雜湊演算法 /// </summary> public class ImageComparer { /// <summary> /// 獲取圖片的Hashcode /// &

密碼學Hash演算法

      前言 在第一篇文章中已經有介紹區塊鏈技術概念,我們知道區塊鏈主要是由共識演算法機制、p2p網路、密碼學這幾個核心技術組成,前面幾篇文章講了共識演算法,p2p網路,這次我們談一下密碼學,密碼學是區塊鏈系統的基礎,如果沒有密碼學技術支撐,區

感知演算法Java實現

Google“相似圖片搜尋”:你可以用一張圖片,搜尋網際網路上所有與它相似的圖片。 開啟Google圖片搜尋頁面: 點選照相按鈕上傳一張angelbaby原圖: 點選搜尋後,Google將會找出與之相似的圖片,圖片相似度越高就越排在前面。如:

影象處理積分圖應用三(基於NCC快速相似匹配演算法

影象處理之積分圖應用三(基於NCC快速相似度匹配演算法) 基於Normalized cross correlation(NCC)用來比較兩幅影象的相似程度已經是一個常見的影象處理手段。在工業生產環節檢測、監控領域對物件檢測與識別均有應用。NCC演算法可以有效降低光照對影象比較結果的影響。而

OpenCV筆記(2)——影象相似對比的幾種辦法

對計算影象相似度的方法,本文做了如下總結,主要有三種辦法: 1.PSNR峰值信噪比 PSNR(Peak Signal to Noise Ratio),一種全參考的影象質量評價指標。 簡介:https://en.wikipedia.org/wiki/Peak_signal-to-noise

OpenCV進行影象相似對比的幾種辦法

對計算影象相似度的方法,本文做了如下總結,主要有三種辦法: 1.PSNR峰值信噪比 PSNR(Peak Signal to Noise Ratio),一種全參考的影象質量評價指標。 PSNR是最普遍和使用最為廣泛的一種影象客觀評價指標,然而

影象相似測量與模板匹配總結

摘要 本文主要總結了進行目標跟蹤、檢測中經常使用到的影象相似度測量和模板匹配方法,並給出了具體的基於OpenCV的程式碼實現。 引言 模板匹配是一種在源影象中尋找與影象patch最相似的技術,常常用來

影象相似計算-kmeans聚類

關於影象相似度,主要包括顏色,亮度,紋理等的相似度,比較直觀的相似度匹配是直方圖匹配.直方圖匹配演算法簡單,但受亮度,噪聲等影響較大.另一種方法是提取影象特徵,基於特徵進行相似度計算,常見的有提取影象的sift特徵,再計算兩幅影象的sift特徵相似度.對於不同的影象型別,也可以採用不同的

深入學習影象處理——影象相似演算法

  最近一段時間學習並做的都是對影象進行處理,其實自己也是新手,各種嘗試,所以我這個門外漢想總結一下自己學習的東西,影象處理的流程。但是動起筆來想總結,一下卻不知道自己要寫什麼,那就把自己做過的相似圖片搜尋的流程整理一下,想到什麼說什麼吧。   首先在進行圖片灰度化處理之前,我覺得有必要了解一下

相似計算Jaccard係數

Jaccard相似係數 定義 給定兩個集合A,B,Jaccard 係數定義為A與B交集的大小與A與B並集的大小的比值,定義如下: 當集合A,B都為空時,J(A,B)定義為1。 與Jaccard 係數相關的指標叫做Jaccard 距離,用於描述集合之間的不相似度。Jaccard

簡單的字串相似匹配加排序

今天遇到一個問題,需要將一組字串,跟結果需要的字串相比較,根據相似性排列出來,思考了一個下午,想了一個簡易的匹配演算法,寫出程式碼的時候下班了,回家除錯了幾次後就成功了,特此將該演算法寫出來。 思路:將一組字串儲存到list中,用兩個for迴圈,先

演算法-圖片相似計算

雜湊演算法實現圖片相似度計算 實現圖片相似度比較的雜湊演算法有三種:均值雜湊演算法,差值雜湊演算法,感知雜湊演算法 1.均值雜湊演算法 一張圖片就是一個二維訊號,它包含了不同頻率的成分。亮度變化小的區域是低頻成分,它描述大範圍的資訊。而亮度變化劇烈的區域(比如物

相似計算餘弦相似

 一、定義及概念: 餘弦取值範圍為[-1,1]。求得兩個向量的夾角,並得出夾角對應的餘弦值,此餘弦值就可以用來表徵這兩個向量的相似性。夾角越小,趨近於0度,餘弦值越接近於1,它們的方向更加吻合,則越相似。當兩個向量的方向完全相反夾角餘弦取最小值-1。當餘弦值為0時,兩向量正交,夾角為9

基礎練習:1123:影象相似

1123:影象相似度 【題目描述】 給出兩幅相同大小的黑白影象(用0-1矩陣)表示,求它們的相似度。說明:若兩幅影象在相同位置上的畫素點顏色相同,則稱它們在該位置具有相同的畫素點。兩幅影象的相似度定義為相同畫素點數佔總畫素點數的百分比。 【輸入】 第一行包含兩個整數m和n,表示影象的行數

通過直方圖比較影象相似

#pragma once using namespace cv; using namespace std; class histogram{ private: int histsize; float range[2]; const float *histrange;