㈠ C#怎麼來判斷2張圖片相似度
很麻煩,而且計算量很大,這個屬於人工智慧的范疇。
如果這「兩張相似圖片」可以規定很多前提,比如相同解析度,黑白,簡單幾何圖形。。。那麼可以用基本的演算法去算一下「相似度」, 也就是樓上說的,讀取兩張照片的像素點,然後遍歷去對比灰度差值。這些有很多現成的演算法,也有很多網站提供這方面的計算(直接調用API即可),但是只能得出數字化的「相似度」。
如果你要的就是兩張圖片像素點之間的差異,那麼就去找演算法即可實現。
看一參考這個網站:www.aforgenet.com 這個是國外比較知名的圖像處理的網站。
但是,兩張圖片如果尺寸不一呢? 如果比例不一樣呢? 如果有留白呢?彩色的呢?
所以目前最成熟的編程演算法也就是識別一下字母和數字(比如谷歌可以識別照片上的門牌號和街道號),人臉識別也只是拿幾個標本部位來大致判斷相似度(眼睛的大小,鼻樑的高度,臉頰的寬瘦和比例), 以人眼的標准完整的去比較兩張圖片是否一樣是很難的,目前應該還沒有這方面成熟的技術。
㈡ 如何使用opencv中的NCC演算法實現兩幅圖像的相似性判斷
圖像相似度計算之哈希值方法OpenCV實現
分類: OpenCV Image Processing 2014-12-25 21:27 180人閱讀 評論(0) 收藏 舉報
感知哈希演算法(perceptual hash algorithm),它的作用是對每張圖像生成一個「指紋」(fingerprint)字元串,然後比較不同圖像的指紋。結果越接近,就說明圖像越相似。
實現步驟:
1. 縮小尺寸:將圖像縮小到8*8的尺寸,總共64個像素。這一步的作用是去除圖像的細節,只保留結構/明暗等基本信息,摒棄不同尺寸/比例帶來的圖像差異;
2. 簡化色彩:將縮小後的圖像,轉為64級灰度,即所有像素點總共只有64種顏色;
3. 計算平均值:計算所有64個像素的灰度平均值;
4. 比較像素的灰度:將每個像素的灰度,與平均值進行比較,大於或等於平均值記為1,小於平均值記為0;
5. 計算哈希值:將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖像的指紋。組合的次序並不重要,只要保證所有圖像都採用同樣次序就行了;
6. 得到指紋以後,就可以對比不同的圖像,看看64位中有多少位是不一樣的。在理論上,這等同於」漢明距離」(Hamming distance,在資訊理論中,兩個等長字元串之間的漢明距離是兩個字元串對應位置的不同字元的個數)。如果不相同的數據位數不超過5,就說明兩張圖像很相似;如果大於10,就說明這是兩張不同的圖像。
㈢ 比較圖片中人臉的相似程度是使用什麼樣的演算法,並且計算得到眼睛,鼻子等相似程度有沒有具體的實現
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就是人臉在圖片中的位置了。
㈣ matlab中畫曲線對比圖的問題
database infomastion
$db_info=array(
'h'=>'localhost',
'u'=>'root',
'pwd'=>'program',
'dbname'=>'agency'
);
$mysqli = new mysql($db_info);
$query = $mysqli->query("select * from user_list");
while($row=$mysqli->fetch_row($query)){
echo $row[1];
}
㈤ 圖像比對的原理或者演算法
有雜訊情況下。1、配准;2、兩張圖的圖像塊分別計算特徵(lbp,sift等);3、計算特徵的距離(歐式距離等)。在matlab或opencv下都可以。
㈥ java 對比圖片相似度的演算法。。說說想法也行
每張圖分成四塊,將每部分的圖片混成一種純色,對比這四個純色可以篩掉大部分的圖片
㈦ matlab怎麼把兩個不同演算法的模擬圖放在一個圖里作比較
在畫完一張圖後,加一條hold on語句,再畫第二張圖,以此類推,就可以在一張圖上花畫多條曲線,另外可以通過代碼設置成不同顏色或者線形加以區分
㈧ 實現圖片對比度和亮度的演算法是什麼
亮度就是一幅照片中的黑白灰分布情況,對比度是亮部和暗部的差距,飽和度就是顏色純度