双线性插值

今天和大家掰扯一个特别简单的概念!我也不知道有没有用,但是对像我一样的小迷糊还是应该有帮助的。

前一段时间帮导师做了一个任务,其中要用到双线性插值。虽然之前学过,而且这个方法也很容易理解,但是我从来没有在实际中用过。所以,还是由于理解的不够透彻而让我在使用时造成了很大的困扰。

前天的《数字图像处理》课刚好讲到了插值,所以整理一下这部分的知识。


错误的观念

其实插值的概念非常简单。但是就是由于它太简单了,我一直没有认真理解过,也没有人纠正,所以我对其存在一些根深蒂固的误解。

先说说我之前的错误理解吧。我们都知道,将图片放大后,有一些像素,我们是找不到他对应的值的。例如下图中右面的图片中的 [0,1],[0,2] 等等。我一直认为双线性插值的意思是:右图中 [0,1] 的值是由右图中 [0,0],[0,3],[3,0],[3,3] 四个点的值通过计算得出的。

其实,这个想法是大错特错的。如果有的小伙伴和以前的我一样迷糊的,可能就会想,怎么会不对呢?

要讲清楚这个问题,就要从如何放大一张图片说起。

将图片放大3倍

图片放大

我们想得到一张放大的图片,现在有原图像(srcImage)和目标图像(dtsImage)。那么,有一个最基本的问题摆在我们面前:是遍历 srcImage 呢,还是遍历 dstImage 呢?(咋还整出代码来了呢?)

在实践的过程中,通常都是遍历 dstImage 的。因为这样可以确保 dstImage 的每一个像素都是有值的。

就拿上图的例子来说,右图(也就是 dstImage)中的 [0,0] 点很顺利的找到了左图中与自己对应的 [0,0] 点。然后 [0,1] 点就懵逼了:“我应该找 [0,0.33],也没有这个点啊!”

插值这个方法,就是为了解决这个问题的。

插值

插值(Interpolation),按我们之前理解的就是在两个数中间插一个数呗。不过,老师说插值问题实际上是一种 拟合问题

我之所以写这篇文章有一半的原因是因为这句话,因为我觉得这为我们的理解又提供了一种新思路。那么,怎样理解这句话呢?

还是以上一节中的例子为例。下面这幅图描述的是以为的情况,就相当于把上一节 srcImage 的第0行拿出来。f(xi-1) 是 [0,0] 的灰度值,f(xi) 是 [0,1] 的灰度值,f(xi+1) 是 [0,2] 的灰度值。f(x') 就是我们想得到的 [0,0.3] 的灰度值。

所以,所谓插值就是用 x' 某个领域内的函数值按照一定规则拟合出一个函数,再在其中查找 f(x') 的值。

插值

几种插值方法

我觉得这几种方法都不用解释了,就直接放图就可以了。
(好敷衍呐!)(闭嘴吧……)

不过这几张图还是很好的,很清晰明了。

1. 最近邻插值(Nearest Interpolation)

2. 线性插值(Linear Interpolation)

3. 双线性插值(Bilinear Interpolation)

基于上一节的理解,我们就可以设定任意规则去拟合,然后做插值了!可以用邻域的三个点、四个点拟合,甚至可以用二次曲线、三次曲线……(只要不挨打就行)

总结

写到这儿,我最开始犯的错误就很明显了。因为插值是对 srcImage 中某个邻域内进行插值,从而得到 dstImage 中某个像素值。而不是在 dstImage 中插值。

有些小伙伴可能会说,那这两种操作的值不是一样的吗?

针对放大、缩小这种变换,确实是一样的。但是如果是图像旋转、甚至扭曲呢?这就完全无法用 dstImage 中的点去插值了。(别问我咋知道的……)

最后

既然是从实践中发现的问题,就在实践中结束。下面附上一段 OpenCV 双线性插值的核心代码。

        //整数部分
        int xi = (int)newx;
        int yi = (int)newy;

        //小数部分
        double xd = newx - xi;
        double yd = newy - yi;

        xi = xi > 0 ? xi : 0;
        xi = xi < colNumber - 1 ? xi : colNumber - 2;
        yi = yi > 0 ? yi : 0;
        yi = yi < rowNumber - 1 ? yi : rowNumber - 2;

        Vec3b index00 = srcImg.at<Vec3b>(yi, xi);
        Vec3b index01 = srcImg.at<Vec3b>(yi, xi + 1);
        Vec3b index10 = srcImg.at<Vec3b>(yi + 1, xi);
        Vec3b index11 = srcImg.at<Vec3b>(yi + 1, xi + 1);

        dstImg.at<Vec3b>(j, i)[0] = (1 - xd)*(1 - yd)*index00[0] + (1 - xd)*yd*index01[0] + xd*(1 - yd)*index10[0] + xd*yd*index11[0];
        dstImg.at<Vec3b>(j, i)[1] = (1 - xd)*(1 - yd)*index00[1] + (1 - xd)*yd*index01[1] + xd*(1 - yd)*index10[1] + xd*yd*index11[1];
        dstImg.at<Vec3b>(j, i)[2] = (1 - xd)*(1 - yd)*index00[2] + (1 - xd)*yd*index01[2] + xd*(1 - yd)*index10[2] + xd*yd*index11[2];

完成啦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容