[image j计算细胞个数]10 18岁男生,发育这样子算大吗?私信拍图

Sina Visitor System&figure&&img src=&https://pic2.zhimg.com/v2-db7441adaae2b70ab62b5384_b.jpg& data-rawwidth=&961& data-rawheight=&468& class=&origin_image zh-lightbox-thumb& width=&961& data-original=&https://pic2.zhimg.com/v2-db7441adaae2b70ab62b5384_r.jpg&&&/figure&&p&记得关注微信公众号【小林CV工坊】哦,爱你萌&/p&&p&吉卜力又有动作了,同学们有机会的话一定要陪家人去逛逛哦。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-effdb15361ffdb99c7ec41_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&588& data-rawheight=&510& class=&origin_image zh-lightbox-thumb& width=&588& data-original=&https://pic1.zhimg.com/v2-effdb15361ffdb99c7ec41_r.jpg&&&/figure&&p&小林虽是B站常驻up(其实只有一个投稿),却不是大会员(大会员不是小林的刚需),关于京紫,小林其实是在更到第十一话的时候回去补的(之前追南极和拉面),但怕完结篇全家哭瞎,所以一直没有勇气去看。康娜酱这么可爱,怎么忍心让她看哭呢。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-6d9eb445fbfdd8154ca49f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&360& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic2.zhimg.com/v2-6d9eb445fbfdd8154ca49f_r.jpg&&&/figure&&hr&&p&上一话我们学习了两种经典的角点检测算法Harri和Shi-Tomasi。这一话我们再来提升一个档次:检测图像的特征,而且还要对相似的图像进行特征匹配。是不是很期待呢?&/p&&p&这一话的结构:&/p&&ul&&li&闲扯&/li&&li&SIFT算法原理,小林并没有展示公式,所以同学们应该能看懂&/li&&li&SIFT关键点检测在OpenCV中的代码表示&/li&&li&SIFT特征匹配在OpenCV中的代码表示&/li&&/ul&&h2&特征检测与特征匹配&/h2&&p&有同学不禁要问了,特征检测和匹配这东西机器学习也可以做啊,我直接跑个神经网络不就行了?小林要讲了,神经网络同使用纯数字图像一样,都是解决问题的方法,作为基础课,小林这里就从数字图像的角度出发,讲解特征匹配。&/p&&p&特征检测经典的算法有SIFT、SURF、FAST和ORB等等,这些算法都是基于对图像关键点的检测。&b&既然是特征,就是说,我扭一扭舔一舔泡一泡,奥利奥还是奥利奥啊,不能癞蛤蟆趴大街上冒充迷彩小吉普你就认不出是癞蛤蟆啊。&/b&&/p&&p&这一话介绍SIFT算法和对应的匹配方法。&/p&&h2&SIFT算法原理&/h2&&p&SIFT,Scale-Invariant Feature Transform,尺度不变特征变换,是用于图像处理领域的一种描述。该方法于1999年由David Lowe(下图这位和蔼又不失睿智的学者)首先发表于计算机视觉国际会议(International Conference on Computer Vision,ICCV),2004年再次经David Lowe整理完善后发表于International journal of computer vision(IJCV)。这个算法已经获得专利保护。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f5210be3cfccd0d2e704e9cbb36bcb3a_b.jpg& data-size=&normal& data-rawwidth=&691& data-rawheight=&476& class=&origin_image zh-lightbox-thumb& width=&691& data-original=&https://pic3.zhimg.com/v2-f5210be3cfccd0d2e704e9cbb36bcb3a_r.jpg&&&figcaption&SIFT算法的创造者 David Lowe&/figcaption&&/figure&&p&那这个算法干了个什么事情呢?小林带领大家从下面几个角度学习SIFT算法。&/p&&ul&&li&&b&我们遇到的问题&/b&&/li&&/ul&&p&在上一讲中,小林讲到了角点的概念和角点的特性。当我们把图像中有角点的区域放大时会出现这样的情况,放大前是一个角点(我们想要的),放大后却变成了三个角点(不就是放大了吗),这种情况是我们不想看到的,我们说,&b&Harri角点检测不具备尺度不变特性&/b&。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-42aaa97ef1e99a61a139c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&327& data-rawheight=&135& class=&content_image& width=&327&&&/figure&&ul&&li&&b&SIFT是如何解决问题的&/b&&/li&&/ul&&p&&b&SIFT算法具有尺度不变特性&/b&,那这东西到底是怎么实现的?&/p&&p&关于算法的具体内容,同学们可查阅论文原文,或打开中文详解版的传送门:&/p&&a href=&https://link.zhihu.com/?target=https%3A//www.cnblogs.com/wangguchangqing/p/4853263.html& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SIFT特征详解 - Brook_icv - 博客园&/a&&p&简言之,SIFT算法大致有下面的步骤:&/p&&p&&b&1.尺度空间极值检测。&/b&&/p&&p&讲到两个函数LoG和DoG。LoG(Laplacian of Gaussian)函数通过调节参数 &img src=&https://www.zhihu.com/equation?tex=%5Csigma& alt=&\sigma& eeimg=&1&& 来调节图像缩放的尺寸,在不同缩放尺寸下求得局部极大值,并形成参数 &img src=&https://www.zhihu.com/equation?tex=%5Cleft%28+x%2Cy%2C%5Csigma+%5Cright%29& alt=&\left( x,y,\sigma \right)& eeimg=&1&& ,这些参数的集合就是潜在的关键点。&/p&&p&但LoG对系统开销较大,因此用DoG(Difference of Gaussian)函数代替LoG函数。DoG函数有两个参数 &img src=&https://www.zhihu.com/equation?tex=%5Csigma& alt=&\sigma& eeimg=&1&& 和 &img src=&https://www.zhihu.com/equation?tex=k%5Csigma& alt=&k\sigma& eeimg=&1&& 。在使用DoG时要先构造Gaussian尺度空间(Gaussian金字塔和Gaussian滤波得到),尺度空间使得金字塔被分成多个组,每个组又有多个层,每层尺度相差比例系数 &img src=&https://www.zhihu.com/equation?tex=k& alt=&k& eeimg=&1&& 。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e6d8299bb4cabe63d66f9_b.jpg& data-size=&normal& data-rawwidth=&450& data-rawheight=&325& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&https://pic1.zhimg.com/v2-e6d8299bb4cabe63d66f9_r.jpg&&&figcaption&左侧为组 右侧为层&/figcaption&&/figure&&p&然后对层进行极大值求解,&b&每次取三层(记为上中下)&/b&,极值求解窗口大小为3*3,对中层图像求极大值,再与上下两层对比,如果确定是三层中的极大值,则该点就是潜在的关键点。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-eff4a1aba0b1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&289& data-rawheight=&234& class=&content_image& width=&289&&&/figure&&p&&b&2.关键点定位,其中包括对质量低下的两类关键点的过滤。&/b&&/p&&ul&&li&低对比度的关键点。使用Taylor展开式展开后,若极大值处的对比度小于某个阈值,这个关键点将被开除。&/li&&li&不稳定的边缘点。DoG对边缘肥肠敏感。我们构建2*2的Hessian矩阵,对其求特征值和迹并得到一个比例,若比例大于某个阈值,则这个点也要被开除。&/li&&/ul&&p&&b&3.确定主方向&/b&&/p&&p&以关键点为中心,半径为 &img src=&https://www.zhihu.com/equation?tex=3%5Ctimes1.5%5Csigma& alt=&3\times1.5\sigma& eeimg=&1&& 确定邻域,对邻域像素计算得到梯度方向后,就要使用直方图统计关键点邻域内像素对应的梯度方向和幅值。梯度方向的范围是0到360度。&/p&&p&在梯度直方图中,当存在一个相当于主峰值80%能量的柱值时,则可以将这个方向认为是该关键点的主方向。&/p&&p&&b&4.关键点描述&/b&&/p&&p&得到关键点的位置和主方向后,为了应对图像旋转后还能辨识出特征,我们还需要对关键点进行旋转变换,并生成用于描述关键点的向量。&/p&&p&进行旋转变换后,以关键点为中心取8*8邻域,对邻域内像素求解梯度并进行Gaussian加权运算,然后将这个8*8的邻域划分为4块,即4*4的邻域,每个方块内求梯度直方图,得到关键点描述向量,如下。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2dca35f8ce1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&616& data-rawheight=&257& class=&origin_image zh-lightbox-thumb& width=&616& data-original=&https://pic3.zhimg.com/v2-2dca35f8ce1_r.jpg&&&/figure&&hr&&h2&SIFT算法进行特征检测的API和Demo&/h2&&p&由于特征检测的很多算法申请了专利保护,以及从算法的稳定性角度出发,从OpenCV 3开始,开发团队就将这些算法移出了release,转而放到了contrib的xfeatures里,至于如何调用,小林会在Demo 中呈现。(如果使用C++的话,应包含“nonefree.cpp”)&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ff302b399efb8b311a1ff1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&173& data-rawheight=&163& class=&content_image& width=&173&&&/figure&&p&&b&Step 1&&我们用SIFT类来创建一个SIFT对象&/b&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&sift&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&xfeatures2d&/span&&span class=&o&&.&/span&&span class=&n&&SIFT_create&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&函数原型:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&retval&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&xfeatures2d&/span&&span class=&o&&.&/span&&span class=&n&&SIFT_create&/span&&span class=&p&&([,&/span& &span class=&n&&nfeatures&/span&&span class=&p&&[,&/span& &span class=&n&&nOctaveLayers&/span&&span class=&p&&[,&/span& &span class=&n&&contrastThreshold&/span&&span class=&p&&[,&/span& &span class=&n&&edgeThreshold&/span&&span class=&p&&[,&/span& &span class=&n&&sigma&/span&&span class=&p&&]]]]])&/span&
&/code&&/pre&&/div&&ul&&li&retval:创建的SIFT对象&/li&&li&其他参数都有各自的默认值,这里不做介绍&/li&&/ul&&p&接下来我们要做三件事:&b&检测关键点,计算关键点的描述,画出关键点&/b&。&/p&&p&&b&Step 2&&先来做前两件事。&/b&我们有两种方法:&/p&&ul&&li&检测,然后计算,即分两步走&/li&&li&检测和计算,一步搞定&/li&&/ul&&p&两步走的代码:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&kp&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&detect&/span&&span class=&p&&(&/span&&span class=&n&&grayImg&/span&&span class=&p&&,&/span&&span class=&bp&&None&/span&&span class=&p&&)&/span&&span class=&c1&&#检测关键点&/span&
&span class=&n&&kp&/span&&span class=&p&&,&/span&&span class=&n&&des&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&compute&/span&&span class=&p&&(&/span&&span class=&n&&grayImg&/span&&span class=&p&&,&/span&&span class=&n&&kp&/span&&span class=&p&&)&/span&&span class=&c1&&#计算关键点描述&/span&
&/code&&/pre&&/div&&p&一步搞定的代码:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&kp&/span&&span class=&p&&,&/span& &span class=&n&&des&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&detectAndCompute&/span&&span class=&p&&(&/span&&span class=&n&&grayImg&/span&&span class=&p&&,&/span&&span class=&bp&&None&/span&&span class=&p&&)&/span&&span class=&c1&&#检测关键点并计算关键点描述&/span&
&/code&&/pre&&/div&&p&来看下这两种方法对应的API:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&keypoints&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&Feature2D&/span&&span class=&o&&.&/span&&span class=&n&&detect&/span&&span class=&p&&(&/span&&span class=&n&&image&/span&&span class=&p&&[,&/span& &span class=&n&&mask&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&ul&&li&image:源图像&/li&&li&mask:掩膜&/li&&li&keypoints:关键点向量&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&keypoints&/span&&span class=&p&&,&/span& &span class=&n&&descriptors&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&Feature2D&/span&&span class=&o&&.&/span&&span class=&n&&compute&/span&&span class=&p&&(&/span&&span class=&n&&image&/span&&span class=&p&&,&/span& &span class=&n&&keypoints&/span&&span class=&p&&[,&/span& &span class=&n&&descriptors&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&ul&&li&image:源图像&/li&&li&keypoints:已知的关键点向量&/li&&li&descriptors:关键点描述向量&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&keypoints&/span&&span class=&p&&,&/span& &span class=&n&&descriptors&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&Feature2D&/span&&span class=&o&&.&/span&&span class=&n&&detectAndCompute&/span&&span class=&p&&(&/span&&span class=&n&&image&/span&&span class=&p&&,&/span& &span class=&n&&mask&/span&&span class=&p&&[,&/span& &span class=&n&&descriptors&/span&&span class=&p&&[,&/span& &span class=&n&&useProvidedKeypoints&/span&&span class=&p&&]])&/span&
&/code&&/pre&&/div&&ul&&li&image:源图像&/li&&li&mask:掩膜&/li&&li&keypoints:关键点向量&/li&&li&descriptors:关键点描述向量&/li&&li&useProvidedKeypoints:是否使用已知关键点,默认值False&/li&&/ul&&p&&b&Step 3&&根据关键点和描述画出关键点&/b&&/p&&p&直接上API:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&outImage&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&drawKeypoints&/span&&span class=&p&&(&/span&&span class=&n&&image&/span&&span class=&p&&,&/span& &span class=&n&&keypoints&/span&&span class=&p&&,&/span& &span class=&n&&outImage&/span&&span class=&p&&[,&/span& &span class=&n&&color&/span&&span class=&p&&[,&/span& &span class=&n&&flags&/span&&span class=&p&&]])&/span&
&/code&&/pre&&/div&&ul&&li&image:源图像&/li&&li&outImage:输出图像,画好了的那种&/li&&li&keypoints:关键点向量&/li&&li&color:颜色&/li&&li&flags:各种属性值&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cv2.DRAW_MATCHES_FLAGS_DEFAULT, 自动创建输出图像 关键点的尺寸和方向不会被画出
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, 画出关键点、尺寸和方向
cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG, 手动创建输出图像
cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS 单一的关键点将不被画出
&/code&&/pre&&/div&&p&好,下面来看完整版的Demo:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&cv2&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span& &span class=&kn&&as&/span& &span class=&nn&&np&/span&
&span class=&n&&img&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imread&/span&&span class=&p&&(&/span&&span class=&s1&&'Mavic Air Fly.jpeg'&/span&&span class=&p&&)&/span&
&span class=&n&&grayImg&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&cvtColor&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&,&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&COLOR_BGR2GRAY&/span&&span class=&p&&)&/span&
&span class=&n&&sift&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&xfeatures2d&/span&&span class=&o&&.&/span&&span class=&n&&SIFT_create&/span&&span class=&p&&()&/span&
&span class=&n&&kp&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&detect&/span&&span class=&p&&(&/span&&span class=&n&&grayImg&/span&&span class=&p&&,&/span& &span class=&bp&&None&/span&&span class=&p&&)&/span&
&span class=&n&&_&/span&&span class=&p&&,&/span& &span class=&n&&des&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&compute&/span&&span class=&p&&(&/span&&span class=&n&&grayImg&/span&&span class=&p&&,&/span& &span class=&n&&kp&/span&&span class=&p&&)&/span&
&span class=&c1&&# kp, des = sift.detectAndCompute(grayImg, None)&/span&
&span class=&c1&&# cv2.drawKeypoints(img, kp, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&drawKeypoints&/span&&span class=&p&&(&/span&&span class=&n&&img&/span&&span class=&p&&,&/span& &span class=&n&&kp&/span&&span class=&p&&,&/span& &span class=&n&&img&/span&&span class=&p&&)&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&s1&&'Key Points'&/span&&span class=&p&&,&/span& &span class=&n&&img&/span&&span class=&p&&)&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&waitKey&/span&&span class=&p&&()&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&destroyAllWindows&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic2.zhimg.com/v2-081bdaa762c_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-081bdaa762c_r.jpg&&&figcaption&源图&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-ffb5b9c97bc37f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-ffb5b9c97bc37f_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-15368dbbbc66db4582148_b.jpg& data-size=&normal& data-rawwidth=&1080& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-15368dbbbc66db4582148_r.jpg&&&figcaption&圆的大小表示关键点的幅值 里面的线段表示关键点的梯度方向&/figcaption&&/figure&&hr&&h2&SIFT算法做特征匹配的API和Demo&/h2&&p&康娜酱自从追了超能力女儿后就对自己的超能力耿耿于怀(毕竟是几千岁的龙),觉得仅仅检测关键点真的好!没!意!思!所以小林继续往下讲,&b&如何对SIFT算法使用后做特征匹配&/b&。&/p&&p&又出现了一个类——BFMatcher,把BF展开就是Brute-Force(蛮力,小林第一眼理解成了&i&布鲁特之力&/i&),顾名思义,使用这个类进行特征匹配就是用了一种暴力求解的方法。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d4a1b089a0f3ec9d6aea01_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&182& data-rawheight=&160& class=&content_image& width=&182&&&/figure&&p&&i&莫名想到鬼畜常用的素材“This is 斯巴达”,不上图了,违和感太强烈。&/i&&/p&&p&那这个传说中的“布鲁特之力”在OpenCV中又是如何实现的呢?简言之,就是根据一幅图像的特征描述和另一副图像的特征描述做距离变换,返回最接近距离结果。&/p&&p&BFMatcher可用于SIFT、SURF、ORB等算法中,不同的算法可能有不同的参数搭配。因为这一话使用的是SIFT,小林就讲下SIFT下如何使用BFMatcher。&/p&&p&&b&Step 1&&创建BFMatcher对象&/b&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&bf&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&BFMatcher_create&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&API文档中指出,&b&BFMatcher的构建方法已经弃用,建议使用BFMatcher_create&/b&。&/p&&p&函数原型:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&retval&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&BFMatcher_create&/span&&span class=&p&&([,&/span& &span class=&n&&normType&/span&&span class=&p&&[,&/span& &span class=&n&&crossCheck&/span&&span class=&p&&]])&/span&
&/code&&/pre&&/div&&ul&&li&retval:创建的BFMatcher对象&/li&&li&normType:如下:&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&cv2.NORM_L1, cv2.NORM_L2, 常用于SIFT和SURF,默认值为cv2.NORM_L2
cv2.NORM_HAMMING, cv2.NORM_HAMMING2,常用于ORB等
&/code&&/pre&&/div&&ul&&li&crossCheck:默认值为False,若为True,则两幅图像中的特征点必须相互匹配,能返回更好的结果&/li&&/ul&&p&&b&Step 2&&计算匹配结果&/b&&/p&&p&创建了BFMatcher对象后,有两种方法做匹配计算:&/p&&ul&&li&match,返回最佳匹配&/li&&li&knnMatch,返回k个描述参数,k由我们指定,详见下文对DMatch的讲解&/li&&/ul&&p&先来看match的函数原型:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&matches&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&DescriptorMatcher&/span&&span class=&o&&.&/span&&span class=&n&&match&/span&&span class=&p&&(&/span&&span class=&n&&queryDescriptors&/span&&span class=&p&&,&/span& &span class=&n&&trainDescriptors&/span&&span class=&p&&[,&/span& &span class=&n&&mask&/span&&span class=&p&&])&/span&
&/code&&/pre&&/div&&p&再来看knnMatch的函数原型:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&matches&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&DescriptorMatcher&/span&&span class=&o&&.&/span&&span class=&n&&knnMatch&/span&&span class=&p&&(&/span&&span class=&n&&queryDescriptors&/span&&span class=&p&&,&/span& &span class=&n&&trainDescriptors&/span&&span class=&p&&,&/span& &span class=&n&&k&/span&&span class=&p&&[,&/span& &span class=&n&&mask&/span&&span class=&p&&[,&/span& &span class=&n&&compactResult&/span&&span class=&p&&]])&/span&
&/code&&/pre&&/div&&p&两种方法都有一个输出参量matches,这个参量是一个DMatch对象,有下列四个属性:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-8e1b23f03ed755dff42bb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&611& data-rawheight=&129& class=&origin_image zh-lightbox-thumb& width=&611& data-original=&https://pic4.zhimg.com/v2-8e1b23f03ed755dff42bb_r.jpg&&&/figure&&p&而上述两个函数中的两个输入参数,在图像匹配时有两种图像的集合,查找集(Query Set)和训练集(Train Set),对于每个Query Descriptor,DMatch中保存了和其最好匹配的Train Descriptor。另外,每个Train Image会生成多个Train Descriptor。&/p&&p&&b&注意了:&/b&在使用knnMatch时,通常将k取2(即Dmatch的前两个属性),然后对k的值进行筛选,得到距离小于设定阈值的匹配(距离越小,效果越好)。&/p&&p&&b&Step 3&&画出匹配结果&/b&&/p&&p&如果使用match方法计算匹配,则对应的绘制函数为drawMatches,如果使用knnMatch计算匹配,则对应的绘制函数为drawMatchesKnn。&/p&&p&函数原型&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&outImg&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&drawMatches&/span&&span class=&p&&(&/span&&span class=&n&&img1&/span&&span class=&p&&,&/span& &span class=&n&&keypoints1&/span&&span class=&p&&,&/span& &span class=&n&&img2&/span&&span class=&p&&,&/span& &span class=&n&&keypoints2&/span&&span class=&p&&,&/span& &span class=&n&&matches1to2&/span&&span class=&p&&,&/span& &span class=&n&&outImg&/span&&span class=&p&&[,&/span& &span class=&n&&matchColor&/span&&span class=&p&&[,&/span& &span class=&n&&singlePointColor&/span&&span class=&p&&[,&/span& &span class=&n&&matchesMask&/span&&span class=&p&&[,&/span& &span class=&n&&flags&/span&&span class=&p&&]]]])&/span&
&/code&&/pre&&/div&&ul&&li&img1、keypoints1、img2和keypoints2:两幅源图像和对应的关键点向量&/li&&li&match1to2:从第一幅图像到第二幅图像的匹配向量&/li&&li&outputImg:输出图像,为两幅图像和匹配映射的线段&/li&&li&matchColor和singlePointColor:匹配线段的颜色和单一关键点的颜色&/li&&li&mathesMask:掩膜&/li&&li&flags:同drawKeypoints函数的flag参数&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&outImg&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&drawMatchesKnn&/span&&span class=&p&&(&/span&&span class=&n&&img1&/span&&span class=&p&&,&/span& &span class=&n&&keypoints1&/span&&span class=&p&&,&/span& &span class=&n&&img2&/span&&span class=&p&&,&/span& &span class=&n&&keypoints2&/span&&span class=&p&&,&/span& &span class=&n&&matches1to2&/span&&span class=&p&&,&/span& &span class=&n&&outImg&/span&&span class=&p&&[,&/span& &span class=&n&&matchColor&/span&&span class=&p&&[,&/span& &span class=&n&&singlePointColor&/span&&span class=&p&&[,&/span& &span class=&n&&matchesMask&/span&&span class=&p&&[,&/span& &span class=&n&&flags&/span&&span class=&p&&]]]])&/span&
&/code&&/pre&&/div&&p&参数同drawMatches。&/p&&p&完整Demo,第一幅图像依然是Mavic Air的大图,第二幅图像截取自Mavic Air的云台:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&cv2&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span& &span class=&kn&&as&/span& &span class=&nn&&np&/span&
&span class=&n&&img1&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imread&/span&&span class=&p&&(&/span&&span class=&s1&&'Mavic Air Fly.jpeg'&/span&&span class=&p&&)&/span&
&span class=&n&&img2&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imread&/span&&span class=&p&&(&/span&&span class=&s1&&'Mavic Air Fly yuntai.jpeg'&/span&&span class=&p&&)&/span&
&span class=&n&&matchImg&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&zeros_like&/span&&span class=&p&&(&/span&&span class=&n&&img1&/span&&span class=&p&&)&/span&
&span class=&n&&grayImg1&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&cvtColor&/span&&span class=&p&&(&/span&&span class=&n&&img1&/span&&span class=&p&&,&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&COLOR_BGR2GRAY&/span&&span class=&p&&)&/span&
&span class=&n&&grayImg2&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&cvtColor&/span&&span class=&p&&(&/span&&span class=&n&&img2&/span&&span class=&p&&,&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&COLOR_BGR2GRAY&/span&&span class=&p&&)&/span&
&span class=&n&&sift&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&xfeatures2d&/span&&span class=&o&&.&/span&&span class=&n&&SIFT_create&/span&&span class=&p&&()&/span&
&span class=&n&&kp1&/span&&span class=&p&&,&/span& &span class=&n&&des1&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&detectAndCompute&/span&&span class=&p&&(&/span&&span class=&n&&grayImg1&/span&&span class=&p&&,&/span& &span class=&bp&&None&/span&&span class=&p&&)&/span&
&span class=&n&&kp2&/span&&span class=&p&&,&/span& &span class=&n&&des2&/span& &span class=&o&&=&/span& &span class=&n&&sift&/span&&span class=&o&&.&/span&&span class=&n&&detectAndCompute&/span&&span class=&p&&(&/span&&span class=&n&&grayImg2&/span&&span class=&p&&,&/span& &span class=&bp&&None&/span&&span class=&p&&)&/span&
&span class=&n&&bf&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&BFMatcher_create&/span&&span class=&p&&(&/span&&span class=&n&&normType&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&NORM_L2&/span&&span class=&p&&,&/span& &span class=&n&&crossCheck&/span&&span class=&o&&=&/span&&span class=&bp&&True&/span&&span class=&p&&)&/span&
&span class=&n&&matches&/span& &span class=&o&&=&/span& &span class=&n&&bf&/span&&span class=&o&&.&/span&&span class=&n&&match&/span&&span class=&p&&(&/span&&span class=&n&&des1&/span&&span class=&p&&,&/span& &span class=&n&&des2&/span&&span class=&p&&)&/span&
&span class=&n&&matches&/span& &span class=&o&&=&/span& &span class=&nb&&sorted&/span&&span class=&p&&(&/span&&span class=&n&&matches&/span&&span class=&p&&,&/span& &span class=&n&&key&/span&&span class=&o&&=&/span&&span class=&k&&lambda&/span& &span class=&n&&x&/span&&span class=&p&&:&/span& &span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&distance&/span&&span class=&p&&)&/span&
&span class=&n&&matchImg&/span& &span class=&o&&=&/span& &span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&drawMatches&/span&&span class=&p&&(&/span&&span class=&n&&img1&/span&&span class=&p&&,&/span& &span class=&n&&kp1&/span&&span class=&p&&,&/span& &span class=&n&&img2&/span&&span class=&p&&,&/span& &span class=&n&&kp2&/span&&span class=&p&&,&/span& &span class=&n&&matches&/span&&span class=&p&&,&/span& &span class=&n&&matchImg&/span&&span class=&p&&,&/span& &span class=&n&&flags&/span&&span class=&o&&=&/span&&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS&/span&&span class=&p&&)&/span&
&span class=&c1&&# bf = cv2.BFMatcher_create(normType=cv2.NORM_L2, crossCheck=False)&/span&
&span class=&c1&&# matches = bf.knnMatch(des1, des2, k=2)&/span&
&span class=&c1&&# 使用阈值筛选距离&/span&
&span class=&c1&&# good = []&/span&
&span class=&c1&&# for m, n in matches:&/span&
&span class=&c1&&#
if m.distance & 0.05*n.distance:&/span&
&span class=&c1&&#
good.append([m])&/span&
&span class=&c1&&#&/span&
&span class=&c1&&# matchImg = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good, matchImg, flags=2)&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&s1&&'Match Image'&/span&&span class=&p&&,&/span& &span class=&n&&matchImg&/span&&span class=&p&&)&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&waitKey&/span&&span class=&p&&()&/span&
&span class=&n&&cv2&/span&&span class=&o&&.&/span&&span class=&n&&destroyAllWindows&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&figure&&img src=&https://pic3.zhimg.com/v2-03bcd2beff7e_b.jpg& data-size=&normal& data-rawwidth=&1378& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1378& data-original=&https://pic3.zhimg.com/v2-03bcd2beff7e_r.jpg&&&figcaption&match匹配和drawMatches方法&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-bcd00ae709d_b.jpg& data-size=&normal& data-rawwidth=&1378& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&1378& data-original=&https://pic1.zhimg.com/v2-bcd00ae709d_r.jpg&&&figcaption&knnMatch匹配和drawMatchesKnn方法&/figcaption&&/figure&&hr&&p&这一话的代码已经同步到Github上了,对应Class 5 Feature Detection and Description文件夹下的C5 SIFT Detection.py和C5 SIFT Match.py。&/p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/KobayashiLiu/Kobayashi_OpenCV_py& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-09bf46ebd334f62bf9ce3de_ipico.jpg& data-image-width=&400& data-image-height=&400& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KobayashiLiu/Kobayashi_OpenCV_py&/a&&hr&&p&所以这一话的标题为什么会有“只做和幸福有关的事”呢?&/p&&p&这是一家充满爱与感恩的主题店,她的名字叫“多谢”,坐落于枣庄市和谐路凯润花园东排门市。&/p&&p&看过紫罗兰永恒花园的同学,请你带上所爱之人,在“多谢”共同去寻找爱的答案吧。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-719c05df8a0ecd93c54978_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&960& data-rawheight=&923& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&https://pic3.zhimg.com/v2-719c05df8a0ecd93c54978_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-6b07d57f04e50b565fb1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2250& data-rawheight=&1687& class=&origin_image zh-lightbox-thumb& width=&2250& data-original=&https://pic3.zhimg.com/v2-6b07d57f04e50b565fb1_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-fccd0b814c9d13fc252f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic3.zhimg.com/v2-fccd0b814c9d13fc252f_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&hr&&h2&最后的最后&/h2&&p&&b&如果喜欢小林的专栏,就收藏了吧!してください!&/b&&/p&
记得关注微信公众号【小林CV工坊】哦,爱你萌吉卜力又有动作了,同学们有机会的话一定要陪家人去逛逛哦。小林虽是B站常驻up(其实只有一个投稿),却不是大会员(大会员不是小林的刚需),关于京紫,小林其实是在更到第十一话的时候回去补的(之前追南极和…
&p&更新:&a class=&member_mention& href=&//www.zhihu.com/people/26f6d585cea3b4ac74c3e& data-hash=&26f6d585cea3b4ac74c3e& data-hovercard=&p$b$26f6d585cea3b4ac74c3e&&@giantpoplar&/a& 已经拿出了测试成果。非常感谢!&/p&&p&首先,你把色度采样精度从4:4:4降到了4:2:2,然后你告诉我文件大小有了显著降低?ARE YOU FUCKING KIDDING ME!?这特么未压缩就已经通过砍分辨率减少了33%的容量!在商品预览图这样图片尺寸不大的图片上,纯色边缘会因此彻底糊掉,而商家Logo则是典型例子。在这种场景下,降低色度采样精度是最为不可取的方法!&/p&&p&然后你把Quality Index(画质指标)降低,然后得意地跟我说“我的文件更小哦~”。要我说,就是“你他妈废话”。&/p&&p&现在看来,京东连guetzli都没用,从失真特性上来看,加了一个低通滤波,降低采样精度至4:2:2,并采用更低的Quality Index。最后优化一下Huffman Tree。现有的Huffman Tree优化工具已经可以将libjpeg的压缩结果在完全无损的情况下进一步提高6.5%左右。我相信,同样的低通滤波预先施加到图片上的话,libjpeg也能达到一样的压缩效率。这样一看是不是根本没有区别了?&/p&&p&散了吧散了吧,本以为JD至少抄也是抄了业界最尖端的工具,结果哪知只是把十年前二十年前的现有工具整合了一下,按照网络安全方面来举例的话,也就是“脚本小子”的级别了。&/p&&hr&&p&Google的guetzli(输出文件是标准JPEG)告诉了我们,Psycho-Visual Optimization(心里视觉优化)才是最“聪明”的解决方案……经过测试居然可以在画质基本相同(肉眼感官)的情况下,文件大小比HEIF(x265编码)还要小!&/p&&p&x264后期引入Psy-RDO和Psy-Trellis就证明了心里视觉优化的巨大威力,也导致了传统画质评判指标PSNR退居二线,SSIM一跃成为主要指标。这次Google推出guetzli也顺带推出了新的画质评判标准“butteraugli”,用以模拟“人眼看到感受的不同”……&/p&&p&题主给的介绍页面上没有提及任何技术细节,我很好奇它怎么兼容现有的浏览器平台?做个JS解码器?如果真能做出仅比原生代码(C++之类的)JPEG解码器慢40%的JS解码器,我觉得JD可以一跃成为相关业界首屈一指的企业。但如果真的像他介绍里那样“完全兼容JPG”,直接利用现有JPEG解码器,我有充分的理由怀疑它只是简单的Fork了Google的guetzli。至于上面写的那个速度可以达到JPEG的50%,有可能是Fork了腾讯做的GPU加速版(参与移植GPU的4人全部是腾讯员工,我有充分的理由认为这是腾讯的意思)……&/p&
更新: 已经拿出了测试成果。非常感谢!首先,你把色度采样精度从4:4:4降到了4:2:2,然后你告诉我文件大小有了显著降低?ARE YOU FUCKING KIDDING ME!?这特么未压缩就已经通过砍分辨率减少了33%的容量!在商品预览图这样图片尺寸不大的图片上,…
&p&目前的条件下,我们国内的普通群众如果想做一些InSAR的项目,最为推荐的就是下载欧空局Sentinel-1A雷达数据,免费下载的,好用到飞起!&/p&&blockquote&Sentinel系列卫星是欧洲哥白尼计划空间部分的专用卫星系列,Sentinel-1A卫星于日发射,载荷为C波段SAR。
成像模式:条带模式SM、干涉测量宽幅模式IW、极宽模式EW、波模式WV
极化模式:双极化HH/VV/VV+VH/HH+HV
参数:SM:80km幅宽,5m×5m分辨率;IW:240km幅宽,5m×20m分辨率;EW:400km幅宽,20m×40m分辨率;WV:20km×20km幅宽,20m×5m分辨率。
轨道高度:693km
倾角:98.18°
入射角:20°~45°
载波波段:C(0.055466m)&/blockquote&&p&干涉出来的效果可以说是令人满意了,随便展示一下我处理的,湖南省西南部,就用我自己的小破电脑笔记本就能做出来:&/p&&p&大家放心,以下影像并不泄密,也没有地理编码,只是个初始阶段半成品。&/p&&p&下图是fint图,看这样清晰的干涉条纹:&/p&&p&SARScape自动workflow流程默认参数处理的,我没有调整任何参数,输入各种原始数据,再按一下按钮就成功,质量堪比演示数据有没有,小白也会做,&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-a3872cdfd5bdbb0db56c630f_b.jpg& data-rawwidth=&1500& data-rawheight=&1155& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&https://pic4.zhimg.com/50/v2-a3872cdfd5bdbb0db56c630f_r.jpg&&&/figure&&p&看这样高度相干的相干系数图cc,厉害了:&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-7b444d7c58b5c848fd0c337d4e82e901_b.jpg& data-rawwidth=&1500& data-rawheight=&1155& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&https://pic4.zhimg.com/50/v2-7b444d7c58b5c848fd0c337d4e82e901_r.jpg&&&/figure&&p&啥,你说全靠滤波方法用得好?软件默认的Goldstein而已,打开dint图看看,原始条纹也美丽:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-ed15f4f914ee5ea0f551_b.jpg& data-rawwidth=&1500& data-rawheight=&1155& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&https://pic3.zhimg.com/50/v2-ed15f4f914ee5ea0f551_r.jpg&&&/figure&&p&Sentinel-1A的IW影像运用的是先进的新型TOPSAR模式,可以利用Burst工作方式和方位波束主动扫描,获取宽幅测绘能力,能够获得宽幅干涉图像。&/p&&p&&b&Sentinel-1A影像的下载网址:&/b&&/p&&p&哨兵科学数据中心 Sentinels Scientific Data Hub&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//scihub.copernicus.eu/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Open Access Hub&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-c893d8cba5897262fad68ea_b.jpg& data-rawwidth=&1553& data-rawheight=&994& class=&origin_image zh-lightbox-thumb& width=&1553& data-original=&https://pic4.zhimg.com/50/v2-c893d8cba5897262fad68ea_r.jpg&&&/figure&&p&注册非常容易,从邮箱激活账号以后,就可以登录下载。&/p&&p&注意下载SLC影像,才能做干涉,不要下错了,影像数据非常的大,一般IW模式的SLC影像,压缩包在4G多,解压缩以后达到9G左右。&/p&&p&举个例子,看下图是下载好的压缩包,第一个影像,就不能直接用来做InSAR,第二个影像,就可以直接用来做InSAR,区别在于_RAW和_SLC。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-cfb4d10df96e205cb20676d0_b.jpg& data-rawwidth=&686& data-rawheight=&86& class=&origin_image zh-lightbox-thumb& width=&686& data-original=&https://pic1.zhimg.com/50/v2-cfb4d10df96e205cb20676d0_r.jpg&&&/figure&&br&&p&不是每个人家里的网络都能够成功下载影像的,普通家庭网络、普通公司网络很可能是下载不了的,报错各种问题……这个时候建议把自己的电脑搬到校园网、光纤宽带、公共图书馆、大学城……等场所,连接上这样的网络,忽然一切问题就都消失了,下载变得很流畅,正常的速度一天可以成功下载两个压缩包。&/p&&p&登陆以后框选,再点上面的查询按钮,&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-d49c299cefb354c744e5411bdf97d791_b.jpg& data-rawwidth=&1650& data-rawheight=&815& class=&origin_image zh-lightbox-thumb& width=&1650& data-original=&https://pic4.zhimg.com/50/v2-d49c299cefb354c744e5411bdf97d791_r.jpg&&&/figure&&p&出来很多,选择自己需要的数据,&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-92f0f5eda13a2a98cd1d7_b.jpg& data-rawwidth=&1889& data-rawheight=&884& class=&origin_image zh-lightbox-thumb& width=&1889& data-original=&https://pic4.zhimg.com/50/v2-92f0f5eda13a2a98cd1d7_r.jpg&&&/figure&&p&蓝色的地址就是下载链接,&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-c39e03a3cbac37fe689cba_b.jpg& data-rawwidth=&1626& data-rawheight=&395& class=&origin_image zh-lightbox-thumb& width=&1626& data-original=&https://pic1.zhimg.com/50/v2-c39e03a3cbac37fe689cba_r.jpg&&&/figure&&p&建议使用Internet Download Manager软件,将注册的账号和密码存在IDM里面,一个压缩包一个压缩包地进行下载,最大连接数不能超过2,这是公认的下载Sentinel-1A最稳定最快的方法,其他手段都有可能下载到一半再也不动了。&/p&&p&&b&做InSAR处理,除了需要SLC影像数据以外,还需要外部DEM数据和精密轨道数据。&/b&&/p&&p&外部DEM数据可以通过SARScape内置的下载模块下载,因为数据量比较小,很快就能下载,位置在General Tools—Digital Elevation Model Extraction。&/p&&p&如果想下载SRTM-3 Version 4的DEM数据,需要翻墙下载。V2的不用翻墙。翻墙以后下载的速度也是非常快的。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-669e998cefdb20a983180a_b.jpg& data-rawwidth=&442& data-rawheight=&217& class=&origin_image zh-lightbox-thumb& width=&442& data-original=&https://pic1.zhimg.com/50/v2-669e998cefdb20a983180a_r.jpg&&&/figure&&p&如果不想翻墙,也可以自行下载DEM数据以后处理成为需要的“_dem”格式,V4的也可以,我都试过,做出来的效果跟软件内置直接下载的没有什么区别,就是自己处理稍微麻烦一些。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-10e3bd1f63_b.jpg& data-rawwidth=&1000& data-rawheight=&543& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic1.zhimg.com/50/v2-10e3bd1f63_r.jpg&&&/figure&&p&自己下载DEM的网址很多,各种免费下载,下载以后裁剪、镶嵌好,得到ENVI格式的数据,再利用SARScape的数据导入功能,Import Data—ENVI Format—Original ENVI Format。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-5fff4e64a_b.jpg& data-rawwidth=&673& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&673& data-original=&https://pic1.zhimg.com/50/v2-5fff4e64a_r.jpg&&&/figure&&p&&b&精密轨道数据的下载网址:&/b&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//qc.sentinel1.eo.esa.int/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&qc.sentinel1.eo.esa.int&/span&&span class=&invisible&&/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&建议下载其中的POD Precise Orbit Ephemerides 精密定轨星历数据,数据文件比较小,用浏览器下载就可以了。&/p&&p&&b&以上所有数据、软件和处理,除了翻墙VPN费以外,都不用花钱,做一些基本应用已经足够了,非常适合我这种没有经费的人……&/b&&/p&&p&此外,除了Sentinel-1A数据的免费下载以外,欧空局去年也已经开放了Envisat卫星ASAR SLC L1数据的下载,不用再像以前那样上网站提交详细的英文申请书,等审核、等批准数据了,注册以后,从Eolisa软件里面可以直接下载,每天限5景。&/p&&p&虽然更加建议使用新的Sentinel-1A数据,不过目前国内关于Envisat数据的应用、教程、论文已经很多了,毕竟已经用了这么多年了,实在一点都不知道做的小白可以依葫芦画瓢做出来,所以下载ASAR SLC也是很不错的。&/p&&p&总之都很推荐,再次感谢欧空局、感谢SARScape,我们没有任何经费的普通小白群众的福音……&/p&
目前的条件下,我们国内的普通群众如果想做一些InSAR的项目,最为推荐的就是下载欧空局Sentinel-1A雷达数据,免费下载的,好用到飞起!Sentinel系列卫星是欧洲哥白尼计划空间部分的专用卫星系列,Sentinel-1A卫星于日发射,载荷为C波段SAR。
&p&砖家来回答一个~ &/p&&p&要回答题主的问题就要首先知道鬼成像背后的发展,下面开始说说历史:
&/p&&p&1956年Hanbury Brown和Twiss两哥们想测量天狼星的直径,怎么测呢?他们开始想用迈克尔逊干涉仪的方法测量,大家知道迈克尔逊干涉仪是根据两束光场E1和E2的干涉条纹来确定光程差(也就是距离的),既然是干涉条纹,那就需要两束光的相位要相干,而相位相干,我们把它叫做光场的一阶关联g(1)。但是天狼星离地球何止十万八千里,大概是8.6光年的样子,所以两束光的相位在到达地球后早就因为传播过程中的扰动而不相干了,所以根本测不出。于是,他俩一拍脑子,说既然光场E1和E2的关联测不到,那我们就测测他们光强I1(I1等于E1的平方)和I2的关联看看,也就是二阶关联g(2)。光强值相对于光场的相位信息来说稳定多了,经过积分求平均后,信号出现了。于是,他们不仅一年灌了两篇Nature(Nature 177, 27 (1956). Nature 178, ).),还从此成就了以自己名字命名的量子光学中的开山实验——HBT实验。之后Glauber在此基础上继续开创完善光场的关联理论(Phys. Rev. 130, ).),一举创立了量子光学,并因此成就在2005年获得诺贝尔物理学奖。&/p&&p&那鬼成像跟HBT实验又有什么关系呢?
我们知道光强I(r,t)既是空间也是时间的函数,当我们把t1=t2确定后,只看两路光在空间r上的关联,这就是鬼成像。我们让一路光通过物体(或者被物体反射),然后把透射光(或者反射光)在空间上各个像素点的光强都加在一起,变成一个总光强I1,这里I1是一个数;另外一路光不通过物体,但是让它走和第一路光一样长的距离,之后把它空间上各个像素点的光强分布值都记录下来,即I2,这里I2是一个矩阵。单单知道I1或者I2都不能得到物体的像,但是把I1和I2乘起来再通过多次测量取平均就可以恢复物体的像了。这就是鬼成像的原理了,因为本质上鬼成像和HBT实验是一样的,而HBT是量子光学的开山实验,所以鬼成像被称为量子成像也就可以理解了。&/p&&p&鬼成像一开始是在1995年由马里兰大学的史砚华组做出来的,用的是量子纠缠光子对,他们认为这是量子效应。但是后来,罗切斯特大学的人用经典光源也做出来了,他们认为鬼成像用经典理论也能解释。于是人分两拨,史砚华站量子解释,麻省理工的J. H. Shapiro和罗切斯特的R. W. Boyd站经典解释。史砚华写了一篇“The Physics of Ghost Imaging”的综述文章,里面用量子论解释;J. H. Shapiro和R. W. Boyd在另外一个杂志写了一篇题目一模一样的综述,用经典理论解释。&/p&&p&现在鬼成像的研究方向主要在于:
&/p&&p&(1)换不同的光源来做,从量子纠缠光源到经典热光源,从波长最短的X射线到红外线,去年12月澳大利亚的人第一次用有质量的粒子做鬼成像,发了鬼成像有史以来的第一篇Nature(Nature 540, 100–103, (2016).)
&/p&&p&(2)想把鬼成像尽快用于实际,但是必须解决成像积分时间长,并且成像质量不高的问题。为了解决这两个问题,人们提出了各种成像算法,其中最牛的要算压缩感知算法了,当然,压缩感知一开始并不是为鬼成像设计的,但是被拿过来用以后,发现效果巨好,成像速度能提高一到两个数量级。&/p&&p&&br&&/p&&p&&b&更新: (鬼成像 vs 单像素成像)&/b&&/p&&p&近5年来鬼成像的研究,至少从发表的论文上来说,成大幅减少的趋势。这大概是因为两个原因:一是里面看得见的新的物理挖掘得差不多了,二是逐渐向实际应用方向转化。零几年那会儿研究鬼成像的主要是物理系的,现在慢慢变成电子系或者计算机系了,这是因为另一个东西的出现:单像素成像(single pixel imaging or single pixel camera),或者叫计算成像(computational imaging)。下面开始讲讲单像素成像和鬼成像的关系。&/p&&p&这又得牵扯到了上面说过的&b&压缩感知&/b&(compressed sensing or compressive sampling),2006年的时候,也就是鬼成像出来11年后,压缩感知被首次理论上提出,在图像处理界是一个巨大突破,它基于图像的稀疏特性,在大幅减少了采样次数的同时能高质量恢复出图像。&/p&&p&在这两年后,也就是08年3月出了一篇文章(Single-pixel imaging via compressive sampling),就是利用压缩感知进行单像素的成像,这篇文章目前引用率马上破2000。非常有意思的是,在08年12月,上面提到的MIT的J. H. Shapiro在PRA(R)发了一篇理论文章(Computational ghost imaging),目前引用率400多次,主要思想是把传统鬼成像所需要的&b&两路光改为一路光&/b&,用一个&b&空间光调制器&/b&(SLM)产生随机强度分布,从而替代参考光那一路,于是只需要用一个单像素相机就可以完成测量,他的目的是想就此论证鬼成像完全可以用经典理论解释。之后压缩感知的算法在09年被引入了鬼成像的图像恢复中。&/p&&p&同样都是08年发出来,J. H. Shapiro的文章发出来晚,不知道是不是受到单像素成像文章的启发,或者又会不会是做单像素成像的其中有人知道一些鬼成像的原理,加以了改进~&/p&&p&所以,大家可以看到,单像素成像和计算鬼成像基本属于一个东西。它们需要的&b&实验设备基本一致&/b&,一个光源+成像物体+单像素相机,当然最重要的是一个能&b&产生随机光强分布的设备&/b&(可以是&b&空间光调制器SLM,也可以是数字微镜装置DMD&/b&)。&/p&&p&不过,按照最开始提出的这两篇文章,两者还是有&b&一个差别&/b&的,那就是&b&产生随机光强分布的设备放的位置&/b&:如果把它放在&b&光源和成像物体中间&/b&,那就是计算鬼成像,有人把这叫做&b&主动照明成像&/b&;如果把它放到&b&物体与单像素相机中间&/b&,那就是单像素成像,有人把这叫做&b&被动照明成像&/b&。&/p&&p&对于两者来说,它们的&b&成像算法可以互通&/b&,都是用&b&随机光强分布矩阵与单像素测量得到的光强做关联运算&/b&或者叫符合运算。鬼成像的算法有不少,最简单的就是二次关联函数的定义,之后还有升级版的&b&高阶关联&/b&、&b&差分鬼成像算法&/b&(differential ghost imaging)等等,当然目前最高版还是&b&压缩感知的鬼成像算法&/b&(compressive ghost imaging)。而单像素成像一上来就是用的压缩感知最高升级版,所以做单像素相机的很多人估计都不知道其成像本质就是光强随机涨落的统计关联。&/p&&p&&b&总结&/b&:计算鬼成像与单像素相机从本质、到实验设备、再到成像算法都是基本一致的。目前鬼成像在物理这边不火了,但是单像素成像方兴未艾,做的人很多,可见趋势是慢慢从上游的物理变成更实用的电子系和计算机系的方向了。其应用前景还是很好的,从军事探测、环境探测、到显微成像、3D成像、医学成像再到超分辨成像目前都有很多文章和专利。&/p&&p&&b&再总结&/b&:现在的做研究的有太多太多各种各样的方向了,但是很多时候,它们之间的本质是一样的,尽管他们的名字、叫法、甚至专业术语都有各自的一套,而且大家之间也不相互引用文章。当然这就给了一些揣着明白装糊涂的人钻空子的机会,把一个东西包装成这个样子在这个领域灌一篇,之后又包装成那个样子在那个领域灌一篇。&/p&&p&&b&展望&/b&:随机阵列显然对不同形状的物体图像的恢复不是最好的选择。通过每次测量到的单像素光强的反馈决定下一次产生的随机光强阵列的分布,这是一个最优值的问题,显然可以结合machine learning来编个程序,使得能用最少的测量次数恢复得到物体的像。根据不同的鬼成像算法,这个最优值的机器学习程序肯定也是不一样的。当然,这个已经开始有人做了一些非常简单的尝试,但是离机器学习的水平还是太远。可惜我不会machine learning,不然又可以去灌几篇水了~所以,会机器学习的朋友请联系我,我们一起去灌水啊!!!&/p&&p&&b&再更新&/b&:刚展望完,就发现arxiv上面一篇文章了-_-||&/p&&p&Computational ghost imaging using deep learning. &a href=&//link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/abs/&/span&&span class=&invisible&&3&/span&&span class=&ellipsis&&&/span&&/a&&/p&
砖家来回答一个~ 要回答题主的问题就要首先知道鬼成像背后的发展,下面开始说说历史: 1956年Hanbury Brown和Twiss两哥们想测量天狼星的直径,怎么测呢?他们开始想用迈克尔逊干涉仪的方法测量,大家知道迈克尔逊干涉仪是根据两束光场E1和E2的干涉条纹来确…
うちの研究室の先輩竹本さんの傑作。不是我做的,研究室的博士前辈做的。&br&&figure&&img data-rawwidth=&655& data-rawheight=&448& src=&https://pic2.zhimg.com/50/v2-da9e9cf26983ecb95e567f3c72d27c4b_b.jpg& class=&origin_image zh-lightbox-thumb& width=&655& data-original=&https://pic2.zhimg.com/50/v2-da9e9cf26983ecb95e567f3c72d27c4b_r.jpg&&&/figure&&br&显微镜都是要镜头的,跟相机一样,如上图,通过光的干涉原理,把干涉光波打在CMOS上,光电转换后&br&利用FPGA进行高速运算,重构出图像。&br&这样,昂贵的镜头可以直接拿掉,同时显微镜size可以大大缩小。&br&&figure&&img data-rawwidth=&450& data-rawheight=&298& src=&https://pic2.zhimg.com/50/v2-878f25dafb7b31a89a33c04e883f87b7_b.jpg& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&https://pic2.zhimg.com/50/v2-878f25dafb7b31a89a33c04e883f87b7_r.jpg&&&/figure&&br&前辈前后做了6年时间,最后做出了全世界最小的LFI显微镜,主要应用在无尘工厂等,粉尘的重构图像很容易鉴别和分类,还在进一步软件开发。&br&&figure&&img data-rawwidth=&300& data-rawheight=&450& src=&https://pic1.zhimg.com/50/v2-69b25bbadfa538b2cc2cb73_b.jpg& class=&content_image& width=&300&&&/figure&&br&大小大概只有半瓶矿泉水那么大。&br&&figure&&img data-rawwidth=&1280& data-rawheight=&1707& src=&https://pic2.zhimg.com/50/v2-98a8cb5a1ff8e3490583a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/50/v2-98a8cb5a1ff8e3490583a_r.jpg&&&/figure&&br&补充一下&br&4年前,初代机有老式电视机那么大。&br&另外,前辈也是日本BEATCRAFT的董事长。&br&附公司网址&br&&a href=&//link.zhihu.com/?target=http%3A//www.beatcraft.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&beatcraft.com&/span&&span class=&invisible&&&/span&&/a&
うちの研究室の先輩竹本さんの傑作。不是我做的,研究室的博士前辈做的。 显微镜都是要镜头的,跟相机一样,如上图,通过光的干涉原理,把干涉光波打在CMOS上,光电转换后 利用FPGA进行高速运算,重构出图像。 这样,昂贵的镜头可以直接拿掉,同时显微镜siz…
&p&一旦你搞清楚了拉普拉斯算子(Laplacian)的物理意义你就知道为什么它那么常见、那么重要了。&/p&&p&一般你看到的拉普拉斯算子长这样: &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7B%5Cnabla%7D%5E2& alt=&\overrightarrow{\nabla}^2& eeimg=&1&& 。当其作用于一个空间标量函数 &img src=&//www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&& 时,写作 &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7B%5Cnabla%7D%5E2f& alt=&\overrightarrow{\nabla}^2f& eeimg=&1&& 。当然这其实是一种缩略写法,特别容易让人看不清其背后的物理意义。为了搞清楚 &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7B%5Cnabla%7D%5E2f& alt=&\overrightarrow{\nabla}^2f& eeimg=&1&& 究竟是啥意思,我们把它还原成没画过妆的样子: &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7B%5Cnabla%7D+%5Ccdot+%28%5Coverrightarrow%7B%5Cnabla%7D+f%29& alt=&\overrightarrow{\nabla} \cdot (\overrightarrow{\nabla} f)& eeimg=&1&& 。&/p&&p&这样一来,物理意义就明确了:&b&拉普拉斯算子其实就是针对空间标量函数的一种“操作”,即先求该标量函数的梯度场,再求梯度场的散度!&/b&在不同的坐标系(Cartisian、Spherical、Cylindrical等)下,拉普拉斯算子的表达形式是不一样的(最简单的表达形式就是Cartisian坐标系下的 &img src=&//www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%5E2%7D%7B%5Cpartial+x%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2%7D%7B%5Cpartial+y%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2%7D%7B%5Cpartial+z%5E2%7D& alt=&\frac{\partial ^2}{\partial x^2}+\frac{\partial^2}{\partial y^2}+\frac{\partial^2}{\partial z^2}& eeimg=&1&& ),但是物理意义都是一致的——求标量函数梯度场的散度。&/p&&p&说到这里,你的问题就转化成了:&b&为什么标量函数梯度场的散度这么重要?&/b&&/p&&p&&b&因为标量函数的梯度往往是一种“驱动力”(或者叫“势”),而针对“驱动力”求散度就可以知道空间中“源”的分布。&/b&举个栗子,空间温度场 &img src=&//www.zhihu.com/equation?tex=T%28x%2Cy%2Cz%29& alt=&T(x,y,z)& eeimg=&1&& 是一个标量,其梯度场 &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7B%5Cnabla%7D+T& alt=&\overrightarrow{\nabla} T& eeimg=&1&& 决定了空间热流密度(面密度)失量场 &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7Bq%7D& alt=&\overrightarrow{q}& eeimg=&1&& 。对于空间中任意一点,热流密度失量大小正比于梯度大小(这里假定材料具有各向同性),热流密度失量方向为梯度方向的反方向。用数学语言说就是, &img src=&//www.zhihu.com/equation?tex=%5Coverrightarrow%7Bq%7D%3Dk%5Coverrightarrow%7B%5Cnabla%7D+T& alt=&\overrightarrow{q}=k\overrightarrow{\nabla} T& eeimg=&1&&
,其中, &img src=&//www.zhihu.com/equation?tex=k%3C0& alt=&k&0& eeimg=&1&& 。再对上述热流密度失量场求散度(本质上就是对温度梯度场求散度)就得到了空间各点的热源特性:散度为正的点是“热源”,热量从其中流出;散度为负的点是“冷源”,热量流入该点。你常看到的一个传热学方程为 &img src=&//www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+x%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+y%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2+T%7D%7B%5Cpartial+z%5E2%7D%3D0& alt=&\frac{\partial^2 T}{\partial x^2}+\frac{\partial^2 T}{\partial y^2}+\frac{\partial^2 T}{\partial z^2}=0& eeimg=&1&& (这是在Cartisian坐标系下描述的拉普拉斯方程)。翻译成自然语言,这个方程是在说:&b&空间中没有热源!&/b&&/p&
一旦你搞清楚了拉普拉斯算子(Laplacian)的物理意义你就知道为什么它那么常见、那么重要了。一般你看到的拉普拉斯算子长这样: \overrightarrow{\nabla}^2 。当其作用于一个空间标量函数 f 时,写作 \overrightarrow{\nabla}^2f 。当然这其实是一种缩略写…
&figure&&img src=&https://pic1.zhimg.com/v2-44ad7a23ca87ce86b23dc736fc29cf09_b.jpg& data-rawwidth=&929& data-rawheight=&525& class=&origin_image zh-lightbox-thumb& width=&929& data-original=&https://pic1.zhimg.com/v2-44ad7a23ca87ce86b23dc736fc29cf09_r.jpg&&&/figure&&p&图像融合,就是把不同的图像的不同部分放在一起,形成一张新的图像。融合得越自然,算法就越好。想到融合,最简单的算法就是在融合边界把两张图像的透明度线性相加(Alpha图像融合),形成一张新的图像,比如这幅著名的苹果橘子图:&/p&&figure&&img data-rawheight=&535& src=&https://pic2.zhimg.com/v2-6aea30c8e6c5a6d715dff18f_b.jpg& data-size=&normal& data-rawwidth=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/v2-6aea30c8e6c5a6d715dff18f_r.jpg&&&figcaption&图像的Alpha融合&/figcaption&&/figure&&p&泊松融合是图像处理领域非常著名的图像融合算法,自从2003年在论文 &a href=&https://link.zhihu.com/?target=http%3A//www.cs.princeton.edu/courses/archive/fall10/cos323/papers/poisson-image-editing.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Poisson Image Editing&/a& 中提出以后,取得了极大的成功,并且在此基础上进行许多改进的研究。&/p&&p&&br&&/p&&p&关于泊松融合的相关知识网络上面有很多的资源可以参考,也可以查看 &a href=&https://link.zhihu.com/?target=http%3A//www.cs.princeton.edu/courses/archive/fall10/cos323/papers/poisson-image-editing.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&论文&/a& 或者书籍 &a href=&https://link.zhihu.com/?target=https%3A//cvfxbook.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Computer Version for Visual Effects&/a&(这本书非常棒,一生推,可以下载PDF并且YouTube有作者的相关课程视频,作者讲课也非常好)中的相关章节,本文主要介绍泊松融合算法的优化。&/p&&p&&br&&/p&&p&泊松融合的本质是求解线性方程组,其算法复杂度为O( N),其中:N为融合区域的像素点个数。虽然求解线性方程组的优化方法有很多(牛顿迭代法、高斯-赛德尔迭代法、雅克比迭代法,梯度下降法,共轭梯度法等)但是放在图像融合这个大背景之下,便需要具体问题具体分析。因此,许多图像处理领域的大牛学者又提出了许多泊松融合的加速算法,下面按照时间顺序为大家介绍。&/p&&p&&br&&/p&&p&&b&一、基于四叉树的加速&/b&&/p&&figure&&img data-rawheight=&686& src=&https://pic4.zhimg.com/v2-d1f14c753b5a79cffd4ef_b.jpg& data-size=&normal& data-rawwidth=&667& class=&origin_image zh-lightbox-thumb& width=&667& data-original=&https://pic4.zhimg.com/v2-d1f14c753b5a79cffd4ef_r.jpg&&&figcaption&算法示意图&/figcaption&&/figure&&p&&br&&/p&&p&该算法是Adobe公司的图像处理大牛 &a href=&https://link.zhihu.com/?target=http%3A//agarwala.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Aseem Agarwala&/a& 在2007年的SIGGRAPH上提出的泊松融合的加速算法,并运用到当时的 PhotoShop 软件之中,论文名称为:&a href=&https://link.zhihu.com/?target=http%3A//www.agarwala.org/efficient_gdc/preprint.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Efficient Gradient-Domain Compositing Using Quadtrees&/a&&/p&&p&&br&&/p&&p&算法的复杂度:O( &img src=&https://www.zhihu.com/equation?tex=%5Csqrt%7Bn%7D& alt=&\sqrt{n}& eeimg=&1&& ),其中n为融合区域的像素点的个数。&/p&&p&&br&&/p&&p&该方法的核心是通过减少最终线性方程组中未知数的个数提高泊松融合的效率。下面首先简介一下什么是四叉树分解:&/p&&p&&br&&/p&&p&1、四叉树分解示意图:&/p&&figure&&img data-rawheight=&228& src=&https://pic2.zhimg.com/v2-daae5acba3_b.jpg& data-size=&normal& data-rawwidth=&502& class=&origin_image zh-lightbox-thumb& width=&502& data-original=&https://pic2.zhimg.com/v2-daae5acba3_r.jpg&&&/figure&&figure&&img data-rawheight=&219& src=&https://pic1.zhimg.com/v2-9a3bc35fcd2f5_b.jpg& data-size=&normal& data-rawwidth=&476& class=&origin_image zh-lightbox-thumb& width=&476& data-original=&https://pic1.zhimg.com/v2-9a3bc35fcd2f5_r.jpg&&&figcaption&四叉树分解示意图&/figcaption&&/figure&&p&&br&&/p&&p&2、四叉树分解后,如何操作?&/p&&p&&b&决定参与构成最终线性方程组的像素点。&/b&&/p&&figure&&img data-rawheight=&449& src=&https://pic2.zhimg.com/v2-962df42f2e6bd_b.jpg& data-size=&normal& data-rawwidth=&704& class=&origin_image zh-lightbox-thumb& width=&704& data-original=&https://pic2.zhimg.com/v2-962df42f2e6bd_r.jpg&&&figcaption&四叉树分解结果示意图&/figcaption&&/figure&&p&①:只有为十字交叉处的点参与运算;&/p&&p&②:丁字路处的交点不参与运算;&/p&&p&③:其余线路上的点都不参与运算;&/p&&p&&br&&/p&&p&3、空白之处的像素点不参与运算,如何获得如何后的灰度值取值?&/p&&p&&b&使用插值算法获得空白处的像素点的灰度值(插值算法比求解线性方程组来说效率要高很多)&/b&&/p&&p&&br&&/p&&p&上面只列出了论文的核心思想,细节问题可详细阅读论文。&/p&&p&&br&&/p&&p&论文主页:&a href=&https://link.zhihu.com/?target=http%3A//www.agarwala.org/efficient_gdc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Efficient Gradient-Domain Compositing Using Quadtrees&/a&&/p&&p&论文开源实现(非作者):&a href=&https://link.zhihu.com/?target=https%3A//github.com/xin-xinhanggao/efficient_quadtree& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&xin-xinhanggao/efficient_quadtree&/a&&/p&&p&&br&&/p&&p&&b&二、基于MVC的泊松融合加速&/b&&/p&&p&&br&&/p&&figure&&img data-rawheight=&511& src=&https://pic3.zhimg.com/v2-a885df872cc277c57991d05_b.jpg& data-size=&normal& data-rawwidth=&1118& class=&origin_image zh-lightbox-thumb& width=&1118& data-original=&https://pic3.zhimg.com/v2-a885df872cc277c57991d05_r.jpg&&&figcaption&算法示意图&/figcaption&&/figure&&p&&br&&/p&&p&该方法是 &a href=&https://link.zhihu.com/?target=http%3A//www.cs.huji.ac.il/%7Efarbmv/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Zeev Farbman&/a& 在2009年的SIGGRAPH上面提出的基于Mean-Value Coordinates方法的泊松融合加速算法,论文名称:&a href=&https://link.zhihu.com/?target=http%3A//www.cs.huji.ac.il/%7Edanix/mvclone/files/mvc-final-opt.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Coordinates for Instant Image Cloning&/a&&/p&&p&&br&&/p&&p&这个论文论点是:将泊松方程转换成拉普拉斯方程,然后再用Mean-Value Coordinates近似求解。整个问题就变成了插值问题,问题复杂度变成了O(m),其中,m是要粘贴图像外轮廓的像素数,并且一般情况下都有m && n(融合区域像素点个数)。算法极其简单,完全可以实时的交互运行。具体细节可以阅读原文查看。&/p&&p&&br&&/p&&p&论文主页:&u&&a href=&https://link.zhihu.com/?target=http%3A//www.cs.huji.ac.il/%7Edanix/mvclone/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.huji.ac.il/~danix/mv&/span&&span class=&invisible&&clone/&/span&&span class=&ellipsis&&&/span&&/a&&/u&&/p&&p&开源代码实现:&u&&a href=&https://link.zhihu.com/?target=https%3A//github.com/jelinson/MVC& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/jelinson/MVC&/span&&span class=&invisible&&&/span&&/a&&/u&&/p&&p&开源代码实现:&u&&a href=&https://link.zhihu.com/?target=https%3A//github.com/pablospe/MVCDemo& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/pablospe/MVC&/span&&span class=&invisible&&Demo&/span&&span class=&ellipsis&&&/span&&/a&&/u&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&三、基于卷积金字塔的泊松融合加速&/b&&/p&&figure&&img data-rawheight=&291& src=&https://pic4.zhimg.com/v2-70cfc79cb2e8b0c8b91df08b_b.jpg& data-size=&normal& data-rawwidth=&1085& class=&origin_image zh-lightbox-thumb& width=&1085& data-original=&https://pic4.zhimg.com/v2-70cfc79cb2e8b0c8b91df08b_r.jpg&&&figcaption&算法示意图&/figcaption&&/figure&&p&&br&&/p&&p&基于卷积金字塔的加速算法与基于MVC泊松融合加速算法的作者都是 &a href=&https://link.zhihu.com/?target=http%3A//www.cs.huji.ac.il/%7Efarbmv/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Zeev Farbman&/a&(大牛佩服膜拜),该算法是其在SIGGRAPH Asia 2011上发表的论文 &a href=&https://link.zhihu.com/?target=http%3A//www.cs.huji.ac.il/labs/cglab/projects/convpyr/data/convpyr-small.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Convolution Pyramids&/a& 中提出的。并且基于卷积金字塔的算法除了应用于泊松图像融合加速之外,还可以用于梯度域集成、离散数据插值等方面。&/p&&p&&br&&/p&&p&论文的主页(包括官方代码):&u&&a href=&https://link.zhihu.com/?target=http%3A//www.cs.huji.ac.il/labs/cglab/projects/convpyr/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&cs.huji.ac.il/labs/cgla&/span&&span class=&invisible&&b/projects/convpyr/&/span&&span class=&ellipsis&&&/span&&/a&&/u&&/p&&p&&br&&/p&&p&如果您有发现比以上几种算法更快的泊松融合加速算法,欢迎留言或者私信告诉我,感激不尽!&/p&&p&PS:如果您在阅读的过程中,发现了文章中的错误,欢迎留言或者私信指出。谢谢啦!&/p&
图像融合,就是把不同的图像的不同部分放在一起,形成一张新的图像。融合得越自然,算法就越好。想到融合,最简单的算法就是在融合边界把两张图像的透明度线性相加(Alpha图像融合),形成一张新的图像,比如这幅著名的苹果橘子图:泊松融合是图像处理领域…
&figure&&img src=&https://pic1.zhimg.com/v2-08c94501dbceca720b0b0c7cfbaf6172_b.jpg& data-rawwidth=&600& data-rawheight=&250& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-08c94501dbceca720b0b0c7cfbaf6172_r.jpg&&&/figure&&p&突然想起自己上古时期开过一个知乎专栏。眼下是年末,又正好PhD毕业前在扫尾写论文。打算写一个福利系列,总结一下自己研究当中读过的论文,特别是那些有代码(code available),可复现(reproducible),效果又好(state-of-the-art)的。因为之后不管是做实验还是写review都可以拿来参考。&/p&&p&这一系列总结,主要涉及和我科研相关的东西,包括:&/p&&ol&&li&图像处理/Low-Level Vision (包括降噪,超分辨,图像补全,去模糊,etc)&/li&&li&稀疏编码/表达(sparse representation)&/li&&li&计算成像(Computational Imaging)&/li&&/ol&&p&&br&&/p&&p&因为算是科研笔记,所以肯定有不完整的地方,希望同行们都来补充。&/p&&p&关于每一集的内容,我都会开一个Github repo,做成开源文档,欢迎大家来contribute。&/p&&p&那么废话不多说,下面就开始&/p&&p&=====================================================&/p&&p&图像降噪,是最简单也是最基础的图像处理逆问题(inverse problem)。&/p&&p&大多数情况下,图像降噪都是ill-posed的问题。因为通过有噪音的观察,总是无法逆向求得唯一正确的干净图片。就好像让你解一个超越方程一样,不借助其他额外的条件信息,是没有唯一解的。&/p&&p&降噪问题(这里只讨论additive noise),用最简单的数学语言一句话就可以描述清楚:&/p&&p&y = x + e&/p&&p&y是你观察到的带噪音的图像,e是噪音,x是干净无噪音的图像。只已知y,外加e的概率分布,降噪问题需要你去寻找最接近真实值的x。&/p&&p&说起来降噪问题如此简单明了,但自从信号处理开宗立派起,研究人员一直在孜孜不倦地提出各种降噪算法。我最早也没搞懂,大家何必纠结于这么简单的问题,而不去考虑更复杂,更贴近实际的花哨应用?&/p&&p&然而世间万物的规律,万变不离其中:不管多复杂问题,其本质往往都有简单的起源。而看似简单的问题,往往却是高手一身修行的追求:就好像考察一个书法家功力,看他写一个永字就好;看一个川菜厨师功力,看他做一道开水白菜就好。&/p&&p&科研之道和其他道也类似,简单的任务见到的是这个approach的潜力:这仅仅是起点,而不是终点。一个好的科研者应该要着眼于起点,追求问题的本源,然后拓展到未来,此为道。只追求花哨的应用,拼凑堆叠,舍本求末甚至本末倒置,只能为术。&/p&&p&好吧,扯远了。我就是想说,图像降噪问题,最简单也最困难。&/p&&p&那么要怎么解好这个逆问题呢?&/p&&p&降噪的本质,是要从观测值中分离噪音,保留图像。算法的关键,是要掌握并借助于图像本身独特的性质和结构。具体用什么性质,这个流派就多了,我在这里就先提供一个不完全总结,关于近期的一些好的图像降噪算法。&/p&&p&根据算法利用了什么图像性质,或者用到的手段,我大概把各种算法分成如下几类:&/p&&ol&&li&滤波类&/li&&li&稀疏表达类&/li&&li&外部先验&/li&&li&聚类低秩&/li&&li&深度学习&/li&&/ol&&p&&br&&/p&&p&我根据我的了解,对于每一个类比总结了一个常见算法列表:&a href=&https://link.zhihu.com/?target=https%3A//github.com/wenbihan/reproducible-image-denoising-state-of-the-art& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wenbihan/reproducible-image-denoising-state-of-the-art&/a&&/p&&p&入选的算法要满足:1.近期(05年以后)提出的算法,2.有可复现的代码提供,3.可以得到很好,或者接近state-of-the-art的效果。&/p&&p&由于我的水平有限,希望同行高手来帮这个public repo添砖加瓦。&/p&&p&&br&&/p&&p&下面对于这几类算法的一些简略地解释:&/p&&p&滤波类:相对比较传统的一类算法,通过设计滤波器对图像进行处理。特点是速度往往比较快,很多卷积滤波可以借助快速傅里叶变化来加速。近期的一些算法例如BM3D也结合了一些block matching来利用图片的self-similarity,达到了很棒的效果。&/p&&p&&br&&/p&&p&稀疏表达类:自然图片之所以看起来不同于随机噪音/人造结构,是因为大家发现他们总会在某一个模型(synthesis model或者analysis model)下存在稀疏表达。而我们想排除的噪音往往无法被稀疏化。基于这个判别式模型(discriminative model),用稀疏性来约束自然图像,在很多逆问题里取得了拔群的效果。&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/wenbihan/reproducible-image-denoising-state-of-the-art& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/wenbihan/rep&/span&&span class=&invisible&&roducible-image-denoising-state-of-the-art&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&外部先验(external prior):如果从有噪音的图片本身无法找到规律,我们也可以借助其他类似但又没有噪音的图片,来总结图片具有的固有属性。这一类方法利用的外部图片来创造先验条件,然后用于约束需要预测的图片。最有代表性的工作,就是混合高斯模型(Gaussian Mixture Model)。严格来说,基于深度学习的算法也可以归于这个类。&/p&&p&&br&&/p&&p&聚类低秩(Low-Rankness):除了可稀疏性,低秩性也是自然图片常见的一个特性。数学上,可稀疏表达的数据可以被认为是在Union of low-dimensional subspaces;而低秩数据则是直接存在于一个Low-dimensional subspace。这个更严格的限制往往也可以取得很好的降噪效果。&/p&&p&&br&&/p&&p&深度学习(Deep Learning):这类可以归于外部先验的子类,但由于近期大热,我单独拿出来说说。如果说解决逆问题的关键,是寻找一个好的图像约束器(regularizer),那么我

我要回帖

更多关于 imagestore算法 的文章

 

随机推荐