SI 2120程式設計影像搜尋綜合

随便玩玩呀發表於2024-04-13

工程學院電氣學院工程和電腦科學SI 2120程式設計正規化相似影像搜尋綜合任務
(24%)2024年冬季最多兩名學生一組的專案
第1部分將於2月16日23:59之前到期
第2部分將於3月8日23:59之前到期
第3部分和第4部分將於4月22日23:59之前到期延遲分配政策:每延遲一天減10%。例如:一個專案週五晚上到期,但週一上午發放:-30%
問題描述
如今,影像以瘋狂的速度被創造和積累。擁有強大的
能夠分析這些影像並促進搜尋、分類和發現的計算機工具感興趣的影像。在這個專案中,你被要求程式設計一個簡單的方法來搜尋類似的影像。所謂相似的影像,我們指的是在內容方面彼此相似的影像以及它們的視覺外觀、顏色和紋理(例如,顯示日落的影像)。您的程式將處理彩色數字影像。然後我們來解釋一下這些影像是如何構造的。A.數字影像被劃分為矩形網格,其中每個元素都是一個畫素(“圖片元素”)。這網格包含一定數量的列和行,定義影像的解析度(例如
手機可能會產生解析度為4032x3024畫素的影像)。畫素包含顏色與影像中的對應位置相關聯的資訊。如果您的影像是灰度(a“黑白”影像),每個畫素的值將在0到255之間(此8位表示為最常見的),0為黑色,255為白色,其他值表示不同的色調灰色。在彩色影像的情況下,每個畫素包含三個值(三個通道),對應於三原色:紅、綠、藍(RGB)。這三個值分別表示紅色、綠色和藍色的量,和產生所需顏色所需的藍色。例如,顏色255:紅色、255:綠色、0:藍色將生成淺黃色,而50:紅色、0:綠色、0:藍色將生成暗紅色與畫素相關聯的通常由包含這三個值的向量[R,G,B]表示通道(例如,用於淺黃色的[255255,0])。由於每種顏色可以取0到255之間的值三個通道的組合產生256 x 256 x 256種不同的顏色(即超過1600萬種)。CSI 2120第2頁
_________________________________________________________________________________________________我們正在尋找類似的圖片。所以,讓我們假設具有相似顏色的影像應該具有相似的顏色所容納之物這是一個簡單化的假設,並不總是正確的,但通常會產生可接受的結果,儘管不完美的結果。這是我們將在這個專案中驗證的內容。因此,有必要計算影像的直方圖並比較這些直方圖。
直方圖只是影像中包含的顏色的計數。它包括計算有多少畫素具有顏色[0,0,0],有多少畫素具有顏色[0],0,1],依此類推。然而,這意味著對所有1600萬種可能的顏色的畫素進行計數,這是昂貴的並且不是很精確。它是因此建議減少色彩空間。這可以透過簡單地減少
可能的值,例如,透過每個通道從8位值到3位值,產生一種顏色只有8 x 8 x 8的空間=512種可能的顏色。在這種情況下,簡單的位右移8–3=5個位置減少了空間。直方圖將只有512個條目,每個可能的顏色都有一個bin。到比較具有不同解析度(不同畫素數)的影像,有必要對
直方圖,即,將每個條目除以畫素總數(從而透過將
直方圖,我們將獲得1.0)。
直方圖比較
如前所述,將透過比較影像的直方圖來對影像進行比較。這可以使用對於直方圖H1和H2,可以如下計算直方圖交集:
如果兩個直方圖相同,則該總和將給出等於1.0的值。相反,如果兩個影像沒有共同的顏色,則它們的直方圖交集將等於0.0。因此相似的是兩幅影像,它們的直方圖交集越接近1.0。
搜尋相似影像
您將被要求使用顏色直方圖交集來查詢與查詢影像相似的影像。一將提供影像資料集用於搜尋。搜尋K個最相似影像的演算法使用減少到D位元的顏色空間的查詢影像I如下:
1.計算I的縮減顏色直方圖
a.透過對每個通道R、G、B應用(8-D)右位移位來減少畫素值。i.R'=R>>(8-D)
ii。G'=G>>(8-D)
iii.B'=B>>(8-D)
b.直方圖H中的倉數為N=2D*3
c.計算每種顏色的多少畫素包含在I中,以獲得直方圖H直方圖H是N個元素的陣列。
CSI 2120第3頁
_________________________________________________________________________________________________i.可以計算與顏色[R',G',B']相對應的直方圖倉的索引如(R'<<(2*D))+(G'<<D)+B)
d.歸一化H,使其所有bin的值總和為1.0
2.將H與影像集中所有預先計算的直方圖進行比較。
a.此比較是使用直方圖交集進行的
b.返回距離最接近1.0的K個影像
程式設計
你必須在不同的正規化下編寫程式來解決這個問題的不同版本。你將收到每種語言的具體說明。
每個程式將標記如下:
程式產生正確的結果【3分】
遵守程式設計模式【2分】
程式設計質量(結構、組織等)[1分]
您的所有檔案都必須包含一個標題,顯示學生ID和小組成員的姓名。所有檔案都必須以zip檔案的形式提交。
CSI 2120第4頁
_________________________________________________________________________________________________資料集
您可以訪問影像資料集。影像以jpg格式提供。的直方圖該資料集中的每個影像都已被計算(每個通道3位)並儲存在文字檔案中。我們還為您提供了16個查詢影像。您必須找到與每個查詢最相似的5個影像影像。查詢影像以jpg和ppm格式提供,您可以使用其中一種。CSI 2120第5頁
_________________________________________________________________________________________________1.物件導向部分(Java)[6%的期末成績]
由於此解決方案必須遵循物件導向的範例,因此您的程式必須由一組類。具體而言,它必須包括以下列出的類別。
除了解決方案的原始碼之外,您還必須提交一個包含UML的文件所有類的圖表(顯示屬性、關聯和方法)。不要使用靜態方法,除了主要功能之外。本文件還必須引用用於構建解決方案的所有參考資料。相似性搜尋類
o包含主要方法
必須指定影像檔名,即影像資料集目錄
java相似性搜尋q01.jpg imageDatasets2_15_20 您可以假設影像資料集的直方圖是預先計算好的
但是,必須計算查詢影像的直方圖
你可以假設搜尋是在3位減色影像上完成的,但
你的程式儘可能通用(沒有深度值的硬編碼,除非在
主要方法)。
程式必須列印與查詢影像最相似的5個影像的名稱
ColorImage類,包括
o從檔案建立影像的建構函式
public ColorImage(字串檔名) 您可以從jpg或ppm格式讀取影像(只需選擇一種格式)您可以使用JMF Java API讀取jpg影像ppm格式只是一個列出RGB值的文字檔案
影像的畫素值儲存在您選擇的陣列表示中
(在提交的檔案中說明)
o以下影像屬性(以及相應的getter方法)
int寬度
int高度
int depth(每個畫素的位數)
o一個getPixel方法,返回中第i列第j行畫素的3通道值三元陣列的形式
public int[3]getPixel(int i,int j)o一種reduceColor方法,將顏色空間縮減為d位表示 public void reduceColor(int d)CSI 2120第6頁
_________________________________________________________________________________________________ColorHistogram類,包括
o為d點陣圖像構建ColorHistogram例項的建構函式 公共顏色直方圖(int d)
o從文字檔案構造ColorHistogram的建構函式 公共顏色直方圖(字串檔名)
o將影像與直方圖例項關聯的setImage方法
public void setImage(ColorImage影像)o返回影像歸一化直方圖的getHistogram方法 公共雙[]getHistogram()
o一種比較方法,返回兩個直方圖之間的交集
公共雙比較(顏色直方圖歷史記錄)
o將直方圖儲存到文字檔案中的儲存
public void ColorHistogram(字串檔名)o加上您認為必要
2.功能程式設計部分(方案)【您最終成績的6%】
對於綜合任務的這一部分,我們要求您執行影像相似性搜尋演算法遵循函式正規化。請參閱一般問題描述部分以瞭解
演算法步驟。
這些要求與物件導向零件的要求相同,只是這次您不必
生成查詢影像的直方圖。您可以使用已生成的直方圖檔案使用Java程式。
您必須建立以下函式才能啟動程式:
(類似搜尋查詢歷史記錄檔名imageDatasetDirectory)此函式應將5個最相似影像的名稱返回到查詢影像。你顯然會必須建立其他功能。請記住,在功能正規化下,建立
幾個短函式比幾個長函式好。
在包含scheme函式檔案和列出函式的文件的zip檔案中提交您的專案以及為每個查詢影像獲得的輸出。本檔案還必須引用所有您可能已用於構建解決方案的引用。
您的所有Scheme函式都必須有一個描述函式功能的頭,輸入引數以及輸出。
不允許使用終止於的函式!(例如set!函式),並且您不能使用迭代迴圈,請使用遞迴。
CSI 2120第8頁
_________________________________________________________________________________________________3.並行程式設計部分(Go)【期末成績的6%】
對於綜合課業的併發部分,我們要求您對影像相似性進行程式設計使用多執行緒的搜尋演算法。為了使其計算成本更高,您的程式將每次執行查詢時都必須計算所有直方圖(來自查詢和資料庫影像)。您的go程式使用以下引數執行:
>go執行similaritySearch queryImageFilename imageDatasetDirectory注:哦。Args提供對命令列引數的訪問。
讀取jpeg影像
幸運的是,如果您檢視有關映像包的Go文件,https://pkg.go.dev/image你將找到一個示例來顯示如何計算影像的直方圖。這並不完全是你想要的必須這樣做,但這是一個很好的起點。提供了該示例的略微修改的版本;它有直方圖Go函式的簽名。
型別Histo結構{
名稱字串
H[]int
}
func computeHistogram(imagePath字串,depth int)(Histo,error)此函式計算指定jpeg影像的直方圖,並將其減少為位數由深度引數給出。起始程式碼相對容易理解,需要注意的一點是Go中影像的畫素值儲存在uint32中,您必須將每個通道的位右移8位置以獲得正確的範圍(0到255)。檢查提供的程式碼,它只顯示RGB值影像的。
您還需要一個函式來計算影像檔名切片的直方圖。
func computeHistograms(imagePath[]字串,depth int\hChan-chan<-Histo)
當計算直方圖時,它被髮送到給定的通道。
CSI 2120第9頁
_________________________________________________________________________________________________主要功能
您的主要功能必須執行以下操作:
1.建立直方圖通道;
2.獲取資料集目錄中所有影像檔名的列表;
3.將該列表拆分為K個切片,並將每個切片傳送到go函式computeHistograms;4.在一個單獨的執行緒中,開啟查詢影像並計算其直方圖5.讀取直方圖的通道
a.當收到直方圖時,將其與查詢直方圖進行比較
b.根據相似性結果,維護5張最相似影像的列表
6.處理完所有影像後,列印5個最相似影像的列表。
7.關閉所有通道,並確保在程式終止之前停止所有執行緒。實驗
為了確定併發演算法的最佳配置,我們要求您執行
以下實驗,並報告每個案例的執行時間:
K=1
K=2
K=4
K=16
K=64
K=256
K=1048
建立一個顯示執行時間與執行緒數量的關係圖(使用所有執行緒的平均執行時間查詢)。在估計執行時間時,不要忘記不要將文字列印到控制檯,這會大大降低了程式的速度。還要指定您的作業系統和規格
處理器(包括核的數量)。你也可以將自己的經歷新增到其他配置。請記住,您的程式必須計算所有直方圖(來自查詢和資料集影像),不使用預先計算的直方圖文字檔案。
除了原始碼外,您還必須提交一份顯示實驗結果的文件。CSI 2120第10頁
_________________________________________________________________________________________________4.邏輯程式設計部分(Prolog)【期末成績的6%】對於綜合任務的最後一部分,您必須執行影像相似性搜尋遵循邏輯程式設計正規化的演算法。請參閱一般問題描述部分
用於演算法步驟。
這些要求與其他部分的要求相同,只是這次不必生成
影像的直方圖。您可以將直方圖文字檔案用於查詢影像和資料集影像所提供的。
您必須建立以下謂詞來解決此問題,如下所示:
- similarity_search('q00.jpg.txt',S)。S=[('2144.jpg.txt',0.8799533333334),('1998.jpg.txt',0.86362),('3538.jpg.txt',0.79226),('33920.jpg.txt',0.77334),('4923.jpg.txt',0.76828)]。(請注意,顯示的解決方案不正確,僅用於演示解決方案的格式)。我們為您提供了一個入門專案,其中包括所需的大多數謂詞。尤其是讀直方圖檔案並返回列表將非常有用。
- read_hist_file('q00.jpg.txt',H)。H=[2715,22,0,0,0,0,0,10,2,2|…]。生成目錄中文字檔案列表的方法也很有用。
- 資料集(D),目錄文字檔案(D,L)。
D='C:\\Users\\Documents\\imageDataset2_15_20\\',L=“1000.jpg.txt”,“1001.jpg.txt”、“1003.jpg.txt”和“1004.jpg.txt”,“1005.jpg.txt',”1006.jpg.txt'“,”1007.jpg.txt''“,”1008.jpg.txt'','1009.jpg.txt'|…]。
請注意資料集目錄路徑是如何透過謂詞dataset/1提供的。CSI 2120第11頁
_________________________________________________________________________________________________最後,我們還為您提供了執行高階演算法的謂詞。
similarity_search(QueryFile,DatasetDirectory,DatasetFiles,最佳):-read_hist_file(QueryFile、QueryHisto),1.
compare_histograms(QueryHisto、DatasetDirectory、,資料集檔案,分數),%2。
排序(2,@>,分數,排序),%3。
take(排序,5,最佳)。%4.
如您所見,此謂詞首先讀取查詢影像的直方圖檔案(read_hist_file/2)。那就好了將此直方圖與直方圖檔案列表(compare_histograms/4)中的所有直方圖進行比較生成(HistogramFilename,Score)對的列表。下一步對獲得的列表進行排序(排序/4)其中前5對被提取(take/3)。
仔細閱讀這個Prolog檔案並實現缺失的謂詞。
在包含評論良好的Prolog謂詞的zip檔案中提交您的專案;所有的Prolog謂詞必須有一個簡短的頭,描述謂詞的作用及其引數。還包括示出針對每個查詢影像獲得的輸出的文件。
CSI 2120第12頁
_________________________________________________________________________________________________規則
你可以兩人一組完成這項任務,學習團隊合作
對這個問題進行思考和頭腦風暴,並與你的伴侶一起程式設計。任何相似之處在你的程式之間到其他組被認為是剽竊。是的,如果你不喜歡團隊合作,你可以單獨完成。不要使用任何來自網際網路的程式碼或程式,因為這也被認為是剽竊。請參閱以下連結中的大學剽竊政策。
https://www2.uottawa.ca/about-us/provost重要提示:如果您的TA發現您的程式碼來自
chatGPT,您將立即收到此專案所有部分的0。
我們為檢測剽竊而採取的措施
已指示助教向教授報告任何抄襲嫌疑
他們在標記課業時會發現。
如果在任何部分或整個課業中發現抄襲,教授將採取
適當的措施。回想一下,複製一個解決方案並讓其他人使用同樣糟糕複製您的解決方案。

相關文章