導航:首頁 > 源碼編譯 > 圖片比較演算法

圖片比較演算法

發布時間:2023-03-20 14:24:10

A. 怎麼對比兩張圖片是不相同

1、網路搜索下載打開Dialog軟體。

B. 圖像識別演算法都有哪些

圖像識別,是指利用計算機對圖像進行處理、分析和理解,以識別各種不同模式的目標和對像的技術。一般工業使用中,採用工業相機拍攝圖片,然後再利用軟體根據圖片灰階差做進一步識別處理,圖像識別軟體國外代表的有康耐視等,國內代表的有圖智能等。另外在地理學中指將遙感圖像進行分類的技術。

C. 圖片相似度判斷

1. https://zhuanlan.hu.com/p/68215900
為了得到兩張相似的圖片,在這里通過以下幾種簡單的計算方式來計算圖片的相似度:
直方圖計算圖片的相似度
通過哈希值,漢明距離計算
通過圖片的餘弦距離計算
通過圖片結構度量計算

二、哈希演算法計算圖片的相似度
圖像指紋:

圖像指紋和人的指紋一樣,是身份的象徵,而圖像指紋簡單點來講,就是將圖像按照一定的哈希演算法,經過運算後得出的一組二進制數字。

漢明距離:

假如一組二進制數據為101,另外一組為111,那麼顯然把第一組的第二位數據0改成1就可以變成第二組數據111,所以兩組數據的漢明距離就為1。簡單點說,漢明距離就是一組二進制數據變成另一組數據所需的步驟數,顯然,這個數值可以衡量兩張圖片的差異,漢明距離越小,則代表相似度越高。漢明距離為0,即代表兩張圖片完全一樣。

感知哈希演算法是一類演算法的總稱,包括aHash、pHash、dHash。顧名思義,感知哈希不是以嚴格的方式計算Hash值,而是以更加相對的方式計算哈希值,因為「相似」與否,就是一種相對的判定。

幾種hash值的比較:

aHash:平均值哈希。速度比較快,但是常常不太精確。
pHash:感知哈希。精確度比較高,但是速度方面較差一些。
dHash:差異值哈希。精確度較高,且速度也非常快

該演算法是基於比較灰度圖每個像素與平均值來實現。

aHash的hanming距離步驟:

先將圖片壓縮成8*8的小圖
將圖片轉化為灰度圖
計算圖片的Hash值,這里的hash值是64位,或者是32位01字元串
將上面的hash值轉換為16位的
通過hash值來計算漢明距離

def ahash(image):
# 將圖片縮放為8*8的
image = cv2.resize(image, (8, 8), interpolation=cv2.INTER_CUBIC)
# 將圖片轉化為灰度圖
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# s為像素和初始灰度值,hash_str為哈希值初始值
s = 0
# 遍歷像素累加和
for i in range(8):
for j in range(8):
s = s + gray[i, j]
# 計算像素平均值
avg = s / 64
# 灰度大於平均值為1相反為0,得到圖片的平均哈希值,此時得到的hash值為64位的01字元串
ahash_str = ''
for i in range(8):
for j in range(8):
if gray[i, j] > avg:
ahash_str = ahash_str + '1'
else:
ahash_str = ahash_str + '0'
result = ''
for i in range(0, 64, 4):
result += ''.join('%x' % int(ahash_str[i: i + 4], 2))
# print("ahash值:",result)
return result
2.感知哈希演算法(pHash):

均值哈希雖然簡單,但是受均值影響大。如果對圖像進行伽馬校正或者進行直方圖均值化都會影響均值,從而影響哈希值的計算。所以就有人提出更健壯的方法,通過離散餘弦(DCT)進行低頻提取。

離散餘弦變換(DCT)是種圖像壓縮演算法,它將圖像從像素域變換到頻率域。然後一般圖像都存在很多冗餘和相關性的,所以轉換到頻率域之後,只有很少的一部分頻率分量的系數才不為0,大部分系數都為0(或者說接近於0)。Phash哈希演算法過於嚴格,不夠精確,更適合搜索縮略圖,為了獲得更精確的結果可以選擇感知哈希演算法,它採用的是DCT(離散餘弦變換)來降低頻率的方法。

pHash的hanming距離步驟:

縮小圖片:32 * 32是一個較好的大小,這樣方便DCT計算轉化為灰度圖
計算DCT:利用Opencv中提供的dct()方法,注意輸入的圖像必須是32位浮點型,所以先利用numpy中的float32進行轉換
縮小DCT:DCT計算後的矩陣是32 * 32,保留左上角的8 * 8,這些代表的圖片的最低頻率
計算平均值:計算縮小DCT後的所有像素點的平均值。
進一步減小DCT:大於平均值記錄為1,反之記錄為0.
得到信息指紋:組合64個信息位,順序隨意保持一致性。
最後比對兩張圖片的指紋,獲得漢明距離即可。

def phash(path):
# 載入並調整圖片為32*32的灰度圖片
img = cv2.imread(path)
img1 = cv2.resize(img, (32, 32),cv2.COLOR_RGB2GRAY)

# 創建二維列表
h, w = img.shape[:2]
vis0 = np.zeros((h, w), np.float32)
vis0[:h, :w] = img1

# DCT二維變換
# 離散餘弦變換,得到dct系數矩陣
img_dct = cv2.dct(cv2.dct(vis0))
img_dct.resize(8,8)
# 把list變成一維list
img_list = np.array().flatten(img_dct.tolist())
# 計算均值
img_mean = cv2.mean(img_list)
avg_list = ['0' if i<img_mean else '1' for i in img_list]
return ''.join(['%x' % int(''.join(avg_list[x:x+4]),2) for x in range(0,64,4)])

相比pHash,dHash的速度要快的多,相比aHash,dHash在效率幾乎相同的情況下的效果要更好,它是基於漸變實現的。

dHash的hanming距離步驟:

先將圖片壓縮成9*8的小圖,有72個像素點
將圖片轉化為灰度圖
計算差異值:dHash演算法工作在相鄰像素之間,這樣每行9個像素之間產生了8個不同的差異,一共8行,則產生了64個差異值,或者是32位01字元串。
獲得指紋:如果左邊的像素比右邊的更亮,則記錄為1,否則為0.
通過hash值來計算漢明距離

def dhash(image):
# 將圖片轉化為8*8
image = cv2.resize(image, (9, 8), interpolation=cv2.INTER_CUBIC)
# 將圖片轉化為灰度圖
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
dhash_str = ''
for i in range(8):
for j in range(8):
if gray[i, j] > gray[i, j + 1]:
dhash_str = dhash_str + '1'
else:
dhash_str = dhash_str + '0'
result = ''
for i in range(0, 64, 4):
result += ''.join('%x' % int(dhash_str[i: i + 4], 2))
# print("dhash值",result)
return result

def campHash(hash1, hash2):
n = 0
# hash長度不同返回-1,此時不能比較
if len(hash1) != len(hash2):
return -1
# 如果hash長度相同遍歷長度
for i in range(len(hash1)):
if hash1[i] != hash2[i]:
n = n + 1
return n

D. 圖像比對的原理或者演算法

有雜訊情況下。1、配准;2、兩張圖的圖像塊分別計算特徵(lbp,sift等);3、計算特徵的距離(歐式距離等)。在matlab或opencv下都可以。

E. 比較圖片中人臉的相似程度是使用什麼樣的演算法,並且計算得到眼睛,鼻子等相似程度有沒有具體的實現

OPENCV里就有。安裝後,DATA目錄下,haarcascades目錄下,haarcascade_frontalface_default.xml就不錯。這是人臉識別的數據。
用法請根據這個文件名找吧,記得就是調用OPENCV里的某個函數(C++),用這個文件名和圖作參數,返回的就是圖中人臉的位置。
這里是你用得著的部分:
const char* cascadeFile = "haarcascade_frontalface_alt.xml";
const char* folder = "C:\\Program Files\\OpenCV\\data\\haarcascades\\";
char path[1024];
sprintf(path, "%s%s", folder, cascadeFile);
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*) cvLoad(path, 0, 0, 0);
//然後cascade就存著需要的那個CvHaarClassifierCascade了。
......
CvSeq* faces = cvHaarDetectObjects(img, cascade, storage,
1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
cvSize(source->getWidth() >> 7, source->getHeight() >> 7));
這句中,img是一個IplImage*,我自己的項目是從攝像頭弄來的,我估計你需要直接用opencv載入圖片。cascade就是載入的OPENCV的樣本數據,storage是一個空間,我用的CvMemStorage* storage = cvCreateMemStorage(0)創建的,detect objects之前我還用了cvClearMemStorage(storage),1.1是縮放,2是檢測像素大小,CV_HAAR_DO_CANNY_PRUNING是比較方法, 一個OPENCV自帶的常量。最後cvSize的返回值是允許的最小臉部大小。每個變數都解釋到了吧。
之後faces->total就是找到幾個臉。用cvGetSeqElem(faces, i)來取每個臉的數據,取出來的東西是(CvRect*),要記得TYPECAST,例如CvRect face1 = *((CvRect*) cvGetSeqElem(faces, 0))。這樣得到的CvRect有4個變數face1.x,face1.y,face1.width,face1.height就是人臉在圖片中的位置了。

F. java 對比圖片相似度的演算法。。說說想法也行

每張圖分成四塊,將每部分的圖片混成一種純色,對比這四個純色可以篩掉大部分的圖片

G. 圖像視頻相似度演算法

前段時間公司項目用到了語音識別,圖像識別,視頻識別等,其實不能說是識別,應該說是相似度對比吧,畢竟相似度對比還上升不了到識別哈,等以後有了更深的理解再來討論修改下!這次就當做一個總結吧!

其實它的原理就是一個把需要的特徵總結在一個指紋碼裡面,進行降維成指紋碼,假如個指紋碼一模一樣,那兩張圖片就想似了.下面有寫怎麼編譯成唯一標識,再用漢明距離計算兩個指紋碼的相似度.

圖片是採用phash演算法,一共分為四步吧.

1.將圖片縮放到16*16大小,這是我們選擇的合適的大小,假如寬高不一樣,直接將其壓到16*16,去掉細節,只保留宏觀;

2.圖片一共是16*16的,共256個像素,我們將圖片進行灰度化,灰度化就是只有黑白灰三種,從白到黑,一共分了255層;

3.灰度化之後將圖片進行DCT轉換(離散餘弦變化),因為為了識別有的圖片旋轉,這個DCT轉換是將圖片進行了一種壓縮演算法;

4.我們對這個演算法進行了優化,因為之前是計算像素的均值,我們為了更准確,我們取RGB,rgb一共分為255個像素,我們將255個像素分為16段,如果像素大於0-16記為0,17到32記為1,直到255,這樣就得到255位的二進制,這就是這張圖片的指紋碼.

得到唯一標識的指紋碼之後怎麼去計算像素度呢?

通過漢明距離比較兩個二進制距離,如果距離小於<10的話,我們就判定兩張圖片相似.如果兩個指紋碼(二進制)一模一樣,我們就判定兩個是一張圖片,或者類似;

視頻的話我們是通過ffmpeg(ff am pig),它是一個專門處理視頻的框架,可以從視頻中按針提取圖片.然後就按照圖片的相似度取對比了...

H. 圖像演算法A和B兩張圖片,找出B與A不同的部分

說的很清楚,你也把思路說出來了,就是這樣的,加快網路的傳輸速度。
至於比較方法,比較像素點的方向是對的,不過我想它不是上來就比較像素點,因為這樣效率較低,而是採用的多函數嵌套,方法如下:
把圖片分成幾大塊,比如平均分4塊,然後每一塊進行比對(進行圖片的模糊匹配,而不是精確的像素匹配),找出不同大塊,然後再分塊,以此下去,找到比較小的塊(這個根據編程定義到底多小算小),然後再進行像素比對,這樣效率能夠更加提高。

閱讀全文

與圖片比較演算法相關的資料

熱點內容
有部電影裡面有兩個人一個拿白色光劍 瀏覽:63
程序員如何自行車通勤 瀏覽:213
打開文件夾一直彈出新的窗口win10 瀏覽:475
外出2015孫藝珍完整板 瀏覽:409
男主角叫奧斯丁的電影 瀏覽:901
linux殺進程命令 瀏覽:597
主角叫秦天系統小說 瀏覽:703
韓國倫理游泳池 瀏覽:6
電影殺手為小男孩改名叫林默 瀏覽:373
現代道士電影 瀏覽:263
tcltkpdf 瀏覽:309
台灣四級論理電影 瀏覽:578
以肉為主yy小說txt下載 瀏覽:727
俄羅斯穿越電影 瀏覽:485
韓國《奇怪的美發沙龍》中文 瀏覽:137
建行app怎麼調成日間模式 瀏覽:666
穿越皇帝當種馬 瀏覽:48
程序員和對象關系不清楚 瀏覽:133
能編輯文件夾的程序 瀏覽:981
國產劇情中國大胸女孩 瀏覽:761