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

圖片相似度最好的演算法

發布時間: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;
}
}
}
閱讀全文

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

熱點內容
網通的寬頻玩電信伺服器地址 瀏覽:828
解壓視頻搞笑大全爆笑 瀏覽:614
米兔解壓積木隱藏款金屬 瀏覽:574
window命令行svn 瀏覽:616
8051單片機包含多大的ram 瀏覽:812
man文件linux 瀏覽:283
javaweb實現頁面跳轉 瀏覽:126
命令如什麼 瀏覽:316
centos如何使用ftp伺服器 瀏覽:982
直立車陀螺儀演算法 瀏覽:70
coreldrawpdf下載 瀏覽:896
虛擬主機雲伺服器軟體服務 瀏覽:372
蘋果的怎麼拉安卓的打游戲 瀏覽:414
游戲程序員負責角色 瀏覽:315
於丹pdf 瀏覽:718
反編譯ref 瀏覽:551
鴻蒙智能文件夾怎麼弄 瀏覽:548
grunt壓縮html 瀏覽:792
macpdfword轉換器 瀏覽:909
壓縮面膜是什麼材質 瀏覽:356