國旗相似度研究—基於canny算子

基於canny算子的國旗相似度研究


(一)這篇文章格格帶大家來研究一下國旗的相似度問題

當今世紀設計界,最大的難題可能就是設計國旗了吧,而國旗界也是抄襲的重災區。那麼我們來看一看到底這些國旗怎麼了。


1.大五角星類

這一類國旗可能是收到某些神祕的東方力量感召。索馬里的像是越南國旗沒上色。相比起來,摩洛哥還算是走心的,至少人家還是個空心的。

這裏寫圖片描述

摩洛哥

這裏寫圖片描述

索馬里

這裏寫圖片描述

越南


2.星月類

其實星月類的國旗很多,但是這兩個是最像的。可能這是伊斯蘭的標誌吧,格格也不太懂。

這裏寫圖片描述

毛里塔尼亞

這裏寫圖片描述

土耳其


3.星條類

格格是第一次聽說利比果亞這個國家。就是這樣一個連百度百科都沒有的非洲內陸國家,沒錯,你山寨了美國的國旗。還是說利比果亞也有一個加入美國的夢啊。這個國旗無論怎麼解讀,都會給人一種美國屬地的既視感啊。

這裏寫圖片描述

美國

這裏寫圖片描述

利比果亞


4.楔子類

這一類國旗是格格最討厭的。可能是這個三角形太尖銳了。畢竟像格格這麼萌萌噠的圓潤的人,怎麼可能喜歡這樣的設計呢。但是偏偏有很多國家都喜歡這種設計,格格就是真的想不明白了。

這裏寫圖片描述

巴哈馬

這裏寫圖片描述

蘇丹

這裏寫圖片描述

古巴

古巴擠破了腦袋想出來的星星設計,就這樣被聖多美和普林西比給挪下去了。

這裏寫圖片描述

聖多美和普林西比


5.十字類

十字類同樣是一個大類,請問你們設計國旗的時候,紅十字會有沒有告你們侵權啊。

這裏寫圖片描述

瑞典

這裏寫圖片描述

芬蘭

這裏寫圖片描述

丹麥

這裏寫圖片描述

瑞士

這裏寫圖片描述

冰島

關於冰島和挪威的國旗,我是服氣的。你們就是交換了個顏色,這樣真的好嗎?

這裏寫圖片描述

挪威


6.欺負色盲類

看了那麼多,都是小case,真正的大佬纔剛剛到達戰場。不是有個笑話說:“一個人想把俄羅斯大使館的國旗燒掉,結果荷蘭大使館遭殃了”。我寧願相信這是真的。這是最讓人一臉懵逼分不出個一二三四的設計了好嗎?但那個法國,你是來幹什麼的!好像荷蘭國旗站起來了。你他媽是來搞笑的嗎?

這裏寫圖片描述

俄羅斯

這裏寫圖片描述

荷蘭

這裏寫圖片描述

法國

這裏寫圖片描述

德國

這裏寫圖片描述

挪威



(二)朕的大清


當然上面那些都不是咱們這篇文章研究的內容。真正的主角纔剛剛登場。


黃龍旗

黃龍旗(中國清朝)

不丹國旗

不丹

可能很多人都覺得不丹國旗上的龍是剽竊咱們中國的圖騰。但是大多數人不知道的是,大清還在的時候,我們也是有過國旗的–黃龍旗(雖然是因爲與國外交往被迫的)。不丹國旗和大清的黃龍旗那簡直是如出一轍啊。哎,奈何朕的大清就這樣亡了,連國旗都被人給偷走了。但是不丹國旗和黃龍旗到底有多像呢?這篇文章,格格就帶大家一起來研究一下這兩個國旗的相似度。

(三)基於canny算子的圖像分割

圖像分割有很多很多算法,最基本的就有梯度算子邊緣檢測(roberts算子,sobel算子,Prewitt算子)、log算子邊緣檢測,canny算子邊緣檢測、Kirsch算子邊緣檢測、Nevitia算子邊緣檢測等等。那麼邊緣檢測算子到底是什麼呢?邊緣檢測 從Roberts到Canny算子 。大家可以通過這篇文章學習一下。其實簡單來說,邊緣檢測算子就是一種用來尋找邊緣的數學方法。如果大家沒有興趣的話,記住這句話就可以了。

由於各個算子的數學原理不同,那麼各個算子在不同的模型或者函數下,運行效果是不同的。並且可能有優劣之分。我們需要通過判斷或者測試來選擇我們最理想的算子進行計算。而且各個算子在具體應用時還有細節上的不同,所以大家可以通過上面的連接來進行了解。
這裏寫圖片描述


下面我們通過測試檢驗一下各個算子的效果

MATLAB代碼如下:

I=imread('黃龍旗.png');
figure
imshow(I);
title('原始圖像');
I1=im2bw(I);
figure
imshow(I1);
title('二值圖像');
I2=edge(I1,'roberts');
figure;
imshow(I2);
title('roberts算子分割結果');
I3=edge(I1,'sobel');
figure;
imshow(I3);
title('sobel算子分割結果');
I4=edge(I1,'Prewitt');
figure;
imshow(I4);
title('Prewitt算子分割結果');
I5=edge(I1,'canny');
figure;
imshow(I5);
title('canny算子分割結果');

那下面我們來看一下效果
roberts
sobel
prewitt
canny

其實很明顯,大家能夠看到,canny算子對於弱邊緣的處理明顯優於其他三種算子。如果大家感覺看的不夠仔細的話,可以通過axis();大家一定能夠明顯的感受到不同算子之間的差異性。


(四)David Lowe 的sift算法—-特徵匹配


圈內有個大佬,名叫David Lowe。大佬發表過三篇論文,講的就是他設計的sift算法(大家可以點擊下載)。這個算法很厲害,至於怎麼厲害,大家可以點擊這裏。其實,sift算法就是用來檢測圖像特徵的。而且sift算法檢測到的特徵是不變特徵,圖像的尺度、角度變換,不會對其產生影響。是不是很厲害的樣子。那我們今天就應用其中的一個小小功能。來檢測一下不丹的國旗和我大清的黃龍旗到底有多少匹配特徵。爲了是不想管因素避免影響我們的結果,所以我們首先用上面的canny算子對兩個原始圖像進行了邊緣分割。在此基礎上進行sift匹配。


聲明:本程序基於MATLAB實現。請自行下載sift算法。將sift的demo放到MATLAB運行的文件夾裏。並在文件夾裏建立如下腳本。

i1=imread('黃龍旗.png');  
i2=imread('不丹國旗.png');  
i11=im2bw(i1);
I1=~edge(i11,'canny');
i22=im2bw(i2);
I2_0=~edge(i22,'canny');
I2=I2_0(:,end:-1:1);%將圖像左右翻轉
figure;
imshow(I1);
figure;
imshow(I2);
imwrite(I1,'v1.jpg','quality',80);  
imwrite(I2,'v2.jpg','quality',80);  
match('v1.jpg','v2.jpg');  

接下來就是見證奇蹟的時刻。我們來看一下兩個圖像的canny算子邊緣檢測結果還有檢測結果的sift特徵匹配。

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

其實結果就還好,只是龍背上的麒比較像啦,別的地方基本上沒有能夠匹配的特徵。所以我現在代表不丹說一聲:我們沒有抄襲大清的黃龍旗!而且,數據實話,我們大清是天朝上國,龍有時我們最尊貴的圖騰,黃龍旗上面的龍那比那個不丹的龍不知道威武到哪裏去了呢。但不說我們的龍輪廓清晰,就是氣質,我們也是昂首向上的。表現了我們泱泱大國蔑視一切的威嚴。而你看不丹的那個,啊…… 算了,說自己好就行了,不說別人的壞話,其實也還將就吧。


(五)完整程序及圖片


點擊下載


本程序基於MATLAB實現。由於版本,庫不同等不可抗力造成的程序運行不暢,請自行調節,謝謝大家。

同時格格的QQ446019725歡迎大家隨時來騷擾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章