图像缩放–插值法__chease

头等把正式送入精神病院:  

   
数字图像处置,分像素使调整值的确定成绩,在这种情况下,使调整是着陆附属的的值插值的。。譬如:地图集射影使不同,任何人像素的目的图像的使调整替换为一致的的,一致的使调整的替换是少数。,诸如,图像的几中止。,这是同一的成绩。。以下是三种经用数字图像间的绍介。

1、日前的元

  这是任何人复杂的插值办法。,离计算,在要找到的像素做成某事像素在附近,被问到T分派变灰色像素到像素在附近的像素。设i+u,
j+v(i, J是任何人无符号积分, u, v是缺勤1的十进法大于零。,作为像素使调整恒等的,像素灰度值是根本的的。 f(i+u,
J V)列举如下图所示:

 

假如(i+u, J V落在一个地面,即u<0.5, v<0.5,则将左上角象素的灰度值赋给待求象素,同样地,落在B区则赋予右上角的象素灰度值,落在C区则赋予左下角象素的灰度值,落在D区则赋予右下角象素的灰度值。

日前的元计算量较小,但它可能性会使掉转船头T产量的图像的灰度级的不分镜头电影剧本。,锯齿状昭著灰度杂耍可能性在哪里。

2、双直线的窜改法法

双直线的窜改法是用两个定位举行直线的窜改法。,列举如下图所示:

 

几乎 (i, j+v),f(i, j) 到 f(i, j+1)
灰变直线的相干。,则有:

   f(i, j+v) = [f(i, j+1) – f(i, j)] *
v + f(i, j)

同样地几乎 (i+1, j+v) 则有:

      f(i+1,
j+v) = [f(i+1, j+1) – f(i+1, j)] * v + f(i+1, j)

出生于F(I), j+v) 到 f(i+1, j+v)
灰度杂耍是直线的的。,于是可推导出待求象素灰度的计算式列举如下:

     
f(i+u, j+v) = (1-u) * (V) * f(i, j) + (1-u) * v * f(i, j+1) + u *
(V) * f(i+1, j) + u * v * f(i+1, j+1)

双直线的窜改法法的计算比TH插补复杂得多。,大方的计算,但缺勤变灰色的不分镜头电影剧本的错误。,总算大致如许是令人满意的。它具有低通抑制器的少许。,损坏高频元件,图像的轮廓可能性颇含糊。。

3、三倍的插补

该办法运用三倍的同次多项式S(x)来方法,
它的算学说法是:

待定像素(x), Y的灰度值是由16个灰度值额外的窜改着,列举如下图:

 

待处置像素的灰度计算列举如下:

f(x, y) = f(i+u, j+v) =
ABC


在内的

 

三倍的翼型插值办法大方的计算,但插值图像的导致最好。

秒把正式送入精神病院:图像缩放
cvresize功用–日前邻插值,双直线的窜改法

图像面积使不同

void cvResize( const CvArr* src,
CvArr* dst, int interpolation=CV_INTER_LINEAR );
src输入图像。dst输入图像。interpolation插值办法:

  • CV_INTER_NN – 日前邻插值,
  • CV_INTER_LINEAR – 双直线的窜改法 (默许运用)
  • CV_INTER_AREA – 应用像素重采样的相干。当图像缩减时,该办法可防止纹波气象。。当图像放大时,相似地
    CV_INTER_NN 办法。
  • CV_INTER_CUBIC – 立方插值。

作用 cvResize 将图像 src 更改大部分以通用
dst 同一大部分。假如设置 ROI,该作用将设法对付价格稳定支持者的支持者。 花费收益率。

日前邻插值:导致(放大4倍)有镶嵌工艺气象。

双直线的窜改法:总算(大于4倍)日前邻插值导致

最后的的日前邻插值和双直线的窜改法

图像的缩放是澄清的懂得,它是图像的放大和减少。。惯例的上色器,有一种叫做放大尺的上色器。,起草者用它来放大相片。。自然,在计算者上,人们不再需求用放大尺放大或减少图像。,履行这项任务,顺序就可以履行。。让人们谈谈电脑可以放大和减少图像的;在本纸,人们所说的全部的图像都是手指矩阵。,它是用像素矩阵来撰文图像的办法。,几乎其他的图像:运用作用来撰文图像的矢图,不参加本文的特别纵队中。
前任的越复杂,就越适合于探察。,人们将供应任何人复杂的图像:3
256级图像,这是3像素的高音调的。,该图像宽度为3像素。,每个像素的值可以是
0-255,像素的灯火通明,255个代表活泼的,即空白,0个代表最暗色,布莱克。假如图像的像素矩阵列举如下图所示(t,源):
234  
38    22
67    
44    12
89    
65    63

这么地矩阵,元素使调整(x),y)如许确定,从左到右,从0开端,Y上下,从零开端,这是图像处置中最经用的使调整系。,这是任何人使调整:

  ———————->X
|
|
|
|
|
∨Y

假如你想放大这么地图
4×4大部分的图像,这么该怎么办呢?那么,头等步是率先闪现的4×4矩阵图,这么地矩阵是排好队伍来的。,列举如下所示,自然,矩阵的每个像素都是不明确的。,准备妥着人们去装满(这将盛产图称为目的图,终点站):
      
      
     
?
      
      
     
?
      
      
     
?
      
      
     

              
      
那么淤塞空矩阵。,要从哪里填写估计成本?它出生于源地图集。,好,率先在终点站图集的左上角淤塞像素。,使调整是(0)。,0),那么在源图的使调整系的使调整可以经过:                                      
srcX=dstX* (srcWidth/dstWidth) , srcY = dstY *
(srcHeight/dstHeight)
好了,套用客套话,就可以找到对应的原图的使调整了(0*(3/4),0*(3/4))=>(0**)=>(0,0)
,找到了源测绘的一致的使调整。,可以调整源测绘做成某事使调整(0)。,0)在目的图中淤塞该安置的234像素值(0)。,0)职业。

接下来,依葫芦画瓢,在终点站图集找到使调整(1,0)像素对应的源地图集使调整,套用客套话:
(1**)=>()
总算发展,有少数点使调整吗?,这是做诸如此类?电脑上的图像是数字图像,像素是最小的单位。,像素的使调整都是积分,从来缺勤过大批的使调整。。这时辰采取的一种谋略执意采取迂回地的办法(也可以采取立即的舍掉少数位的办法),非积分为积分使调整,好,那么,使调整(1)是在四和五的办法通用(1,0),这是任何人丰富的的操作过程。:
(1**)=>()=>(1,0)
那么可以将像素淤塞到目的矩阵中。,恒等的的是源测绘的使调整(1)。,0)做成某事38个目的使调整的像素值。。
        
为了填写每个像素,放大的图像落地了。,像素矩阵列举如下所示:
234   
38    
22    
22  
67     
44    
12    
12  
89     
65    
63    
63  
89     
65    
63    
63  

这么地放大图像的办法高等的日前邻插值算法,这是最根本的办法经过。、最复杂的图像缩放算法,其导致是最差的。,放大的图像具有十足的剧烈的的镶嵌工艺,减少的图像有十足的剧烈的的扭转。;对健康有害的使发生的基石是它的复杂日前插补I。,譬如,当出生于T使调整的源地图集使调整,采取四RMS和五打字。,与此浮点法数日前的像素的值立即的运用。,这种办法是十足的不科学的,当使调整促进时
的时辰,不应复杂地将其论点1。,因它是,缺勤1 ,大于0
,这么目的象素值事实上本应着陆这么地源图中假的的点四周的四的真实的点来鉴于必然的严格纪律信奉者计算出版的,这么可以遂愿更合适的的缩放导致。。双直线的窜改法算法是一种澄清的图像缩放算法。,它充分地的应用了源图中假的点四周的四的真实在的像素值来协同确定目的图做成某事任何人像素值,故此,缩放导致比复杂的日前邻插值更合适的。

双直线的窜改法算法撰文列举如下
几乎目的像素,反求使调整系的浮点法使调整,j+v)
(在内的我、j是浮点法使调整的积分把正式送入精神病院。,u、v是浮点法数使调整的少数把正式送入精神病院。,这是[ 0 ]的估计成本。,1)区间的浮点法数),那么,像素值 f(i+u,j+v)
原始图像的使调整 (i,j)、(i+1,j)、(i,j+1)、(i+1,j 1)确定四周四的像素的值。,即:

  f(i+u,j+v) = (1-u)(V)f(i,j) + (1-u)VF(我,j+1) + u(V)f(i+1,j) +
uvf(i+1,j+1)                         
客套话1

在内的,f(i),j)表现源意向(i),在该像素值),如此等等。

譬如,不少于探察,现时,假如目的图的像素使调整是(1),1),那么反推是源测绘的使调整。 , ),
这有效地是任何人观点假的像素。,源图中缺勤这么的像素。,那么目的图像的像素(1,值1)不克不及经过这么地假的像素确定,它最适当的经过源图四像素确定。:(0,0)(0,1)(1,0)(1,1),鉴于(75)(1),1)离得更近,那么(1,1)确定角色的大起,这可以从客套话1中系数UV中设法对付给某物加玻璃。,而(.75)离(0,0)最远的,因而(0,0)方针决策的使发生较小。,客套话中系数为(1-u)(V)=×也表现出了这一少许。

规律充当顾问联系在一起

OpenCV的指定遗传密码:级别是退到一边去的级别。

点击(此处凹处或翻开

  1. #include “”
  2. #include <cv.h>
  3. #include <cxcore.h>
  4. #include <highgui.h>
  5. #include <cmath>
  6. using namespace std;
  7. using namespace cv;
  8. int main(int
    argc ,char **
    argv)
  9. {
  10.     IplImage
    *scr=0;
  11.     IplImage
    *dst=0;
  12.     double
    scale=4;
  13.     CvSize
    dst_cvsize;
  14.     if(argc==2&&(scr=cvLoadImage(argv[1],1))!=0)
  15.     {
  16.         dst_cvsize.width=(int)(scr>width*scale);
  17.         dst_cvsize.height=(int)(scr>height*scale);
  18.         dst=cvCreateImage(dst_cvsize,scr>depth,scr>nChannels);
  19.         cvResize(scr,dst,CV_INTER_NN);//
  20. //
                CV_INTER_NN
    日前邻插值,
  21. //
                CV_INTER_LINEAR
    双直线的窜改法 (默许运用)
  22. //
                CV_INTER_AREA

    应用像素重采样的相干。当图像缩减时,该办法可防止纹波气象。。
  23.         /*当图像放大时,相似地 CV_INTER_NN 办法..*/
  24. //
                CV_INTER_CUBIC
    立方插值.
  25.         cvNamedWindow(“scr”,CV_WINDOW_AUTOSIZE);
  26.         cvNamedWindow(“dst”,CV_WINDOW_AUTOSIZE);
  27.         cvShowImage(“scr”,scr);
  28.         cvShowImage(“dst”,dst);
  29.         cvWaitKey();
  30.         cvReleaseImage(&scr);
  31.         cvReleaseImage(&dst);
  32.         cvDestroyWindow(“scr”);
  33.         cvDestroyWindow(“dst”);
  34.     }
  35.     return
    0;
  36. }

工作量中,请等一会儿。

发表评论

电子邮件地址不会被公开。 必填项已用*标注