當前位置:首頁 » 圖片大全 » diff為多少表示兩張圖片相似
擴展閱讀
茵蒂克絲背景圖片 2025-08-09 21:08:50
兔子和牛卡通圖片 2025-08-09 20:56:42
胃結構高清圖片 2025-08-09 20:51:12

diff為多少表示兩張圖片相似

發布時間: 2023-04-22 04:29:22

㈠ 版圖中diff是什麼

Diff層是一個比豎茄御納讓較層,用於比較輸入的特徵圖和目標特徵圖,以計算兩個特徵圖之間的差異,這樣可以用於優化網路的訓練。它也可以用於余岩圖像分類,以查看兩個圖像之間的差異,以便判斷圖像的類別。

㈡ Linux文件比較命令的diff命令

該命令的功能為逐行比較兩個文本文件,列出其不同之處。它比comm命令完成更復雜的檢查。它扒辯對給出的文件進行系統的檢查,並顯示出兩個文件中所有不同的行,不要求事先對文件進行排序。
語法:diff [選項] file1 file2
說明:該命令告訴用戶,為了使兩個文件file1和file2一致,需要修改它們的哪些行。如果用「- 」表示file1或fiie2,則表示標准輸入。如果file1或file2是目錄,那麼diff將使用該目錄中的同名文件進行比較。
例如: diff /usr/xu mine
把目錄/usr/xu 中名為mine的文件與當前目錄中的mine文件進行比較。
通常輸出由下述形式的行組成:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4 這些行類似ed命令把filel轉換成file2。字母(a、d和c)之前的行號(n1,n2)是針對file1的,其後面的行號(n3,n4)是針對file2的。字母a、d和c分別表示附加、刪除和修改操作。
在上述形式的每一行的後面跟隨受到影響的若干行,以「<」打頭的行屬於第一個文件,以「>」打頭的行屬於第二個文件。
diff能區別塊和字元設備文件以及FIFO(管道文件),不會把它們與普通文件進行比較。
如果file1和file2都是目錄,則diff會產生很多信息。
如果一個目錄中只有一個文件,則產生一條信息,指顫唯出該目錄路徑名和其中的文件名。
diff各選項的含義如下:
- b 忽略行尾的空格,而字元串中的一個或多個空格符都視為相等。
如How are you與How are you被視為相同的字元串。
- c 採用上下文輸出格式(提供三行上下文)。
- C n 採用上下文輸出格式(提供n行上下文)。
- e 產生一個合法的ed腳本作為輸出。
- r 當file1和file2是目錄時,遞歸作用到各文件和目錄上。
例如,文件ml.c的內容為(左邊行號是有意加上的,以便前後對照):
1 main( )
{
printf(「Hello! 」);
}
5 文件m2.c的內容為:
1 main()
2 {
3 int n , m ;
4 n= 10 ;
5 printf ( 「 % d \\ n 」 , m = n * 10);
6 }
輸入命令:
$ diff m1.c m2.c
屏幕上顯示:
3,5 c 3,6
printf(「Hello! 」);
}
<5
>3
int n,m;
>4 n=10 ;
>5 printf ( 「 % d \\ n 」 , m = n * 10);
>6 }
表示把文茄此培件m1.c的3至5行改成m2.c的3至6行後,兩個文件相同。

㈢ 如何使用opencv中的NCC演算法實現兩幅圖像的相似性判斷

感知哈希演算法(perceptual hash algorithm),它的作用是對每張圖像生成一個「指紋」(fingerprint)字元串,然後比較不同圖像的指紋。結果越接近,就說明圖像越相似。
實現步驟:
1. 縮小尺寸:將圖像縮小到8*8的尺寸,總共64個像素。這一步的作用是去除圖像的細節,只保留結構/明暗等基本信息,摒棄不同尺寸/比例帶來的圖像差異;
2. 簡化色彩:將縮小後的圖像,轉為64級灰度伏念肢,即所有像素點總共只有64種顏色;
3. 計算平均值:計算所有64個像素的灰度平均值;
4. 比較像素的灰度:將每個像素的灰度,與平均值進行比較,大於或等於平均值記為1,小於平均值記為0;
5. 計算哈希值:將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖像的指紋。組合的次序並不重要,只要保證所有圖像都採用同樣次序就行了;
6. 得到指紋以後,就可以對比不同的圖像,看看64位中有多少位是不一樣的高爛。在理論上,這等同於」漢明距離」(Hamming distance,在資訊理論中,兩個等長字元串之間的漢明距離是兩個字元串對應位置的不同字元的個數)。如果不相同的數據位數不超過5,就說明兩張圖像很相似;如果大於10,就說明這是兩張不同的圖像。
以上內容摘自:http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html
下缺世面是用OpenCV實現的測試代碼:
[cpp] view plainprint?
string strSrcImageName = "src.jpg";
cv::Mat matSrc, matSrc1, matSrc2;
matSrc = cv::imread(strSrcImageName, CV_LOAD_IMAGE_COLOR);
CV_Assert(matSrc.channels() == 3);
cv::resize(matSrc, matSrc1, cv::Size(357, 419), 0, 0, cv::INTER_NEAREST);
//cv::flip(matSrc1, matSrc1, 1);
cv::resize(matSrc, matSrc2, cv::Size(2177, 3233), 0, 0, cv::INTER_LANCZOS4);
cv::Mat matDst1, matDst2;
cv::resize(matSrc1, matDst1, cv::Size(8, 8), 0, 0, cv::INTER_CUBIC);
cv::resize(matSrc2, matDst2, cv::Size(8, 8), 0, 0, cv::INTER_CUBIC);
cv::cvtColor(matDst1, matDst1, CV_BGR2GRAY);
cv::cvtColor(matDst2, matDst2, CV_BGR2GRAY);
int iAvg1 = 0, iAvg2 = 0;
int arr1[64], arr2[64];
for (int i = 0; i < 8; i++) {
uchar* data1 = matDst1.ptr<uchar>(i);
uchar* data2 = matDst2.ptr<uchar>(i);
int tmp = i * 8;
for (int j = 0; j < 8; j++) {
int tmp1 = tmp + j;
arr1[tmp1] = data1[j] / 4 * 4;
arr2[tmp1] = data2[j] / 4 * 4;
iAvg1 += arr1[tmp1];
iAvg2 += arr2[tmp1];
}
}
iAvg1 /= 64;
iAvg2 /= 64;
for (int i = 0; i < 64; i++) {
arr1[i] = (arr1[i] >= iAvg1) ? 1 : 0;
arr2[i] = (arr2[i] >= iAvg2) ? 1 : 0;
}
int iDiffNum = 0;
for (int i = 0; i < 64; i++)
if (arr1[i] != arr2[i])
++iDiffNum;
cout<<"iDiffNum = "<<iDiffNum<<endl;
if (iDiffNum <= 5)
cout<<"two images are very similar!"<<endl;
else if (iDiffNum > 10)
cout<<"they are two different images!"<<endl;
else
cout<<"two image are somewhat similar!"<<endl;
string strSrcImageName = "src.jpg";
cv::Mat matSrc, matSrc1, matSrc2;
matSrc = cv::imread(strSrcImageName, CV_LOAD_IMAGE_COLOR);
CV_Assert(matSrc.channels() == 3);
cv::resize(matSrc, matSrc1, cv::Size(357, 419), 0, 0, cv::INTER_NEAREST);
//cv::flip(matSrc1, matSrc1, 1);
cv::resize(matSrc, matSrc2, cv::Size(2177, 3233), 0, 0, cv::INTER_LANCZOS4);
cv::Mat matDst1, matDst2;
cv::resize(matSrc1, matDst1, cv::Size(8, 8), 0, 0, cv::INTER_CUBIC);
cv::resize(matSrc2, matDst2, cv::Size(8, 8), 0, 0, cv::INTER_CUBIC);
cv::cvtColor(matDst1, matDst1, CV_BGR2GRAY);
cv::cvtColor(matDst2, matDst2, CV_BGR2GRAY);
int iAvg1 = 0, iAvg2 = 0;
int arr1[64], arr2[64];
for (int i = 0; i < 8; i++) {
uchar* data1 = matDst1.ptr<uchar>(i);
uchar* data2 = matDst2.ptr<uchar>(i);
int tmp = i * 8;
for (int j = 0; j < 8; j++) {
int tmp1 = tmp + j;
arr1[tmp1] = data1[j] / 4 * 4;
arr2[tmp1] = data2[j] / 4 * 4;
iAvg1 += arr1[tmp1];
iAvg2 += arr2[tmp1];
}
}
iAvg1 /= 64;
iAvg2 /= 64;
for (int i = 0; i < 64; i++) {
arr1[i] = (arr1[i] >= iAvg1) ? 1 : 0;
arr2[i] = (arr2[i] >= iAvg2) ? 1 : 0;
}
int iDiffNum = 0;
for (int i = 0; i < 64; i++)
if (arr1[i] != arr2[i])
++iDiffNum;
cout<<"iDiffNum = "<<iDiffNum<<endl;
if (iDiffNum <= 5)
cout<<"two images are very similar!"<<endl;
else if (iDiffNum > 10)
cout<<"they are two different images!"<<endl;
else
cout<<"two image are somewhat similar!"<<endl;