導航:首頁 > 源碼編譯 > 圖片相似度最好的演算法

圖片相似度最好的演算法

發布時間:2023-04-05 04:22:18

1. 利用matlab,想計算兩張圖片的相似度,要用到什麼函數或者演算法例如求特徵值用eigs,希望能告訴操作步驟

用歐氏距離可以表徵相似度。兩個圖相減再求平方和就可以。求和用sum()

2. 如何用Python計算上幾百張圖片之間的相似度

把圖片表示成向量,二維拉成一維
每個維度非零即一,然後比較兩個向量的漢明距離就能反向代表相似度

3. C#怎麼來判斷2張圖片相似度

很麻煩,而且計算量很大,這個屬於人工智慧的范疇。

如果這「兩張相似圖片」可以規定很多前提,比如相同解析度,黑白,簡單幾何圖形。。。那麼可以用基本的演算法去算一下「相似度」, 也就是樓上說的,讀取兩張照片的像素點,然後遍歷去對比灰度差值。這些有很多現成的演算法,也有很多網站提供這方面的計算(直接調用API即可),但是只能得出數字化的「相似度」。


如果你要的就是兩張圖片像素點之間的差異,那麼就去找演算法即可實現。

看一參考這個網站:www.aforgenet.com 這個是國外比較知名的圖像處理的網站。


但是,兩張圖片如果尺寸不一呢? 如果比例不一樣呢? 如果有留白呢?彩色的呢?

所以目前最成熟的編程演算法也就是識別一下字母和數字(比如谷歌可以識別照片上的門牌號和街道號),人臉識別也只是拿幾個標本部位來大致判斷相似度(眼睛的大小,鼻樑的高度,臉頰的寬瘦和比例), 以人眼的標准完整的去比較兩張圖片是否一樣是很難的,目前應該還沒有這方面成熟的技術。

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

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

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

圖片是採用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),它是一個專門處理視頻的框架,可以從視頻中按針提取圖片.然後就按照圖片的相似度取對比了...

5. 計算圖像相似度的演算法有哪些

SIM = Structural SIMilarity(結構相似性),這是一種用來評測圖像質量的一種方法。由於人類視覺很容易從圖像中抽取出結構信息,因此計算兩幅圖像結構信息的相似性就可以用來作為一種檢測圖像質量的好壞.

首先結構信息不應該受到照明的影響,因此在計算結構信息時需要去掉亮度信息,即需要減掉圖像的均值;其次結構信息不應該受到圖像對比度的影響,因此計算結構信息時需要歸一化圖像的方差;最後我們就可以對圖像求取結構信息了,通常我們可以簡單地計算一下這兩幅處理後的圖像的相關系數.

然而圖像質量的好壞也受到亮度信息和對比度信息的制約,因此在計算圖像質量好壞時,在考慮結構信息的同時也需要考慮這兩者的影響.通常使用的計算方法如下,其中C1,C2,C3用來增加計算結果的穩定性:
2u(x)u(y) + C1
L(X,Y) = ------------------------ ,u(x), u(y)為圖像的均值
u(x)^2 + u(y)^2 + C1

2d(x)d(y) + C2
C(X,Y) = ------------------------,d(x),d(y)為圖像的方差
d(x)^2 + d(y)^2 + C2

d(x,y) + C3
S(X,Y) = ----------------------,d(x,y)為圖像x,y的協方差
d(x)d(y) + C3

而圖像質量Q = [L(X,Y)^a] x [C(X,Y)^b] x [S(X,Y)^c],其中a,b,c分別用來控制三個要素的重要性,為了計算方便可以均選擇為1,C1,C2,C3為比較小的數值,通常C1=(K1 x L)^2, C2=(K2 xL)^2, C3 = C2/2, K1 << 1, K2 << 1, L為像素的最大值(通常為255).
希望對你能有所幫助。

6. C#灰度圖像通過相似度演算法找出相似度最高的圖片

這種以圖搜圖可以用感知哈希演算法,


第一步 縮小圖片尺寸

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

第二步 轉為灰度圖片

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

第三步 計算灰度平均值

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

第四步 比較像素的灰度

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

第五步 計算哈希值

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

第六步 對比圖片指紋

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

具體的c#代碼可以看

usingSystem;
usingSystem.IO;
usingSystem.Drawing;

namespaceSimilarPhoto
{
classSimilarPhoto
{
ImageSourceImg;

publicSimilarPhoto(stringfilePath)
{
SourceImg=Image.FromFile(filePath);
}

publicSimilarPhoto(Streamstream)
{
SourceImg=Image.FromStream(stream);
}

publicStringGetHash()
{
Imageimage=ReceSize();
Byte[]grayValues=ReceColor(image);
Byteaverage=CalcAverage(grayValues);
Stringreslut=ComputeBits(grayValues,average);
returnreslut;
}

//Step1:Recesizeto8*8
privateImageReceSize(intwidth=8,intheight=8)
{
Imageimage=SourceImg.GetThumbnailImage(width,height,()=>{returnfalse;},IntPtr.Zero);
returnimage;
}

//Step2:ReceColor
privateByte[]ReceColor(Imageimage)
{
BitmapbitMap=newBitmap(image);
Byte[]grayValues=newByte[image.Width*image.Height];

for(intx=0;x<image.Width;x++)
for(inty=0;y<image.Height;y++)
{
Colorcolor=bitMap.GetPixel(x,y);
bytegrayValue=(byte)((color.R*30+color.G*59+color.B*11)/100);
grayValues[x*image.Width+y]=grayValue;
}
returngrayValues;
}

//Step3:Averagethecolors
privateByteCalcAverage(byte[]values)
{
intsum=0;
for(inti=0;i<values.Length;i++)
sum+=(int)values[i];
returnConvert.ToByte(sum/values.Length);
}

//Step4:Computethebits
privateStringComputeBits(byte[]values,byteaverageValue)
{
char[]result=newchar[values.Length];
for(inti=0;i<values.Length;i++)
{
if(values[i]<averageValue)
result[i]='0';
else
result[i]='1';
}
returnnewString(result);
}

//Comparehash
(stringa,stringb)
{
if(a.Length!=b.Length)
thrownewArgumentException();
intcount=0;
for(inti=0;i<a.Length;i++)
{
if(a[i]!=b[i])
count++;
}
returncount;
}
}
}
閱讀全文

與圖片相似度最好的演算法相關的資料

熱點內容
單片機中如何編程 瀏覽:739
cad常見的快捷命令 瀏覽:625
伺服器端有什麼 瀏覽:325
文件夾正在使用如何重命名 瀏覽:378
單片機觸摸 瀏覽:875
qq收藏夾在手機哪個文件夾 瀏覽:755
為什麼app的密碼總是不正確 瀏覽:324
方舟手機版為什麼進不了伺服器 瀏覽:594
伺服器ip可以查到真實地址嗎 瀏覽:656
象棋軟體演算法 瀏覽:993
飄零加密 瀏覽:175
文件加密軟體哪個好用免費保險櫃 瀏覽:752
黑石物理伺服器是雲伺服器嗎 瀏覽:621
java讀文件一行 瀏覽:793
熔火之心伺服器是什麼 瀏覽:628
湯子瀛第四版pdf 瀏覽:827
剛剛解壓的車能過戶嗎 瀏覽:523
pdf證書加密開發 瀏覽:159
android緩存工具類 瀏覽:220
pic單片機秒錶 瀏覽:632