国旗相似度研究—基于canny算子

来源:互联网 发布:中科软java面试题 编辑:程序博客网 时间:2024/06/06 03:56

基于canny算子的国旗相似度研究


(一)这篇文章格格带大家来研究一下国旗的相似度问题

当今世纪设计界,最大的难题可能就是设计国旗了吧,而国旗界也是抄袭的重灾区。那么我们来看一看到底这些国旗怎么了。


1.大五角星类

这一类国旗可能是收到某些神秘的东方力量感召。索马里的像是越南国旗没上色。相比起来,摩洛哥还算是走心的,至少人家还是个空心的。

这里写图片描述

摩洛哥

这里写图片描述

索马里

这里写图片描述

越南


2.星月类

其实星月类的国旗很多,但是这两个是最像的。可能这是伊斯兰的标志吧,格格也不太懂。

这里写图片描述

毛里塔尼亚

这里写图片描述

土耳其


3.星条类

格格是第一次听说利比果亚这个国家。就是这样一个连百度百科都没有的非洲内陆国家,没错,你山寨了美国的国旗。还是说利比果亚也有一个加入美国的梦啊。这个国旗无论怎么解读,都会给人一种美国属地的既视感啊。

这里写图片描述

美国

这里写图片描述

利比果亚


4.楔子类

这一类国旗是格格最讨厌的。可能是这个三角形太尖锐了。毕竟像格格这么萌萌哒的圆润的人,怎么可能喜欢这样的设计呢。但是偏偏有很多国家都喜欢这种设计,格格就是真的想不明白了。

这里写图片描述

巴哈马

这里写图片描述

苏丹

这里写图片描述

古巴

古巴挤破了脑袋想出来的星星设计,就这样被圣多美和普林西比给挪下去了。

这里写图片描述

圣多美和普林西比


5.十字类

十字类同样是一个大类,请问你们设计国旗的时候,红十字会有没有告你们侵权啊。

这里写图片描述

瑞典

这里写图片描述

芬兰

这里写图片描述

丹麦

这里写图片描述

瑞士

这里写图片描述

冰岛

关于冰岛和挪威的国旗,我是服气的。你们就是交换了个颜色,这样真的好吗?

这里写图片描述

挪威


6.欺负色盲类

看了那么多,都是小case,真正的大佬才刚刚到达战场。不是有个笑话说:“一个人想把俄罗斯大使馆的国旗烧掉,结果荷兰大使馆遭殃了”。我宁愿相信这是真的。这是最让人一脸懵逼分不出个一二三四的设计了好吗?但那个法国,你是来干什么的!好像荷兰国旗站起来了。你他妈是来搞笑的吗?

这里写图片描述

俄罗斯

这里写图片描述

荷兰

这里写图片描述

法国

这里写图片描述

德国

这里写图片描述

挪威



(二)朕的大清


当然上面那些都不是咱们这篇文章研究的内容。真正的主角才刚刚登场。


黄龙旗

黄龙旗(中国清朝)

不丹国旗

不丹

可能很多人都觉得不丹国旗上的龙是剽窃咱们中国的图腾。但是大多数人不知道的是,大清还在的时候,我们也是有过国旗的–黄龙旗(虽然是因为与国外交往被迫的)。不丹国旗和大清的黄龙旗那简直是如出一辙啊。哎,奈何朕的大清就这样亡了,连国旗都被人给偷走了。但是不丹国旗和黄龙旗到底有多像呢?这篇文章,格格就带大家一起来研究一下这两个国旗的相似度。

(三)基于canny算子的图像分割

图像分割有很多很多算法,最基本的就有梯度算子边缘检测(roberts算子,sobel算子,Prewitt算子)、log算子边缘检测,canny算子边缘检测、Kirsch算子边缘检测、Nevitia算子边缘检测等等。那么边缘检测算子到底是什么呢?边缘检测 从Roberts到Canny算子 。大家可以通过这篇文章学习一下。其实简单来说,边缘检测算子就是一种用来寻找边缘的数学方法。如果大家没有兴趣的话,记住这句话就可以了。

由于各个算子的数学原理不同,那么各个算子在不同的模型或者函数下,运行效果是不同的。并且可能有优劣之分。我们需要通过判断或者测试来选择我们最理想的算子进行计算。而且各个算子在具体应用时还有细节上的不同,所以大家可以通过上面的连接来进行了解。
这里写图片描述


下面我们通过测试检验一下各个算子的效果

MATLAB代码如下:

I=imread('黄龙旗.png');figureimshow(I);title('原始图像');I1=im2bw(I);figureimshow(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欢迎大家随时来骚扰

原创粉丝点击