• 关于双线性插值


    方法一:Opencv自带的用插值办法做的图像缩放
         dst_cvsize.width=(int)(scr->width*scale);
            dst_cvsize.height=(int)(scr->height*scale);
            dst=cvCreateImage(dst_cvsize,scr->depth,scr->nChannels);
    
            cvResize(scr,dst,CV_INTER_LINEAR);//
    //             CV_INTER_NN - 最近邻插值,
    //             CV_INTER_LINEAR - 双线性插值 (缺省使用)
    //             CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。
             /*当图像放大时,类似于 CV_INTER_NN 方法..*/
    //             CV_INTER_CUBIC - 立方插值.
    
        
    方法二:matlab实现(灰度图)
    close all;
    clear all;
    clc;
    
    m=1.8;              %放大或缩小的高度
    n=2.3;              %放大或缩小的宽度
    img=imread('lena.jpg');
    imshow(img);
    [h w]=size(img);
    imgn=zeros(h*m,w*n);
    rot=[m 0 0;0 n 0;0 0 1];                                   %变换矩阵
    
    for i=1:h*m
        for j=1:w*n
            pix=[i j 1]/rot;   
            
            float_Y=pix(1)-floor(pix(1)); 
            float_X=pix(2)-floor(pix(2));
           
            if pix(1) < 1        %边界处理
                pix(1) = 1;
            end
            
            if pix(1) > h
                pix(1) = h;
            end
            
            if pix(2) < 1
                pix(2) =1;
            end
            
            if pix(2) > w
                pix(2) =w;
            end
            
            pix_up_left=[floor(pix(1)) floor(pix(2))];    %四个相邻的点
            pix_up_right=[floor(pix(1)) ceil(pix(2))];
            pix_down_left=[ceil(pix(1)) floor(pix(2))];
            pix_down_right=[ceil(pix(1)) ceil(pix(2))];     
        
            value_up_left=(1-float_X)*(1-float_Y);      %计算临近四个点的权重
            value_up_right=float_X*(1-float_Y);
            value_down_left=(1-float_X)*float_Y;
            value_down_right=float_X*float_Y;
                                        %按权重进行双线性插值
            imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...
                      value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...
                      value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...
                      value_down_right*img(pix_down_right(1),pix_down_right(2));        
        end
    end
    
    figure,imshow(uint8(imgn))
  • 相关阅读:
    [SDOI2009]生日礼物(单调队列)
    [luogu1638]逛画展(单调队列)
    【最短路】·SPFA算法实现
    [UVA10474]大理石在哪儿
    【转载】C++中string erase函数的使用
    【转载】高精度减法的OP写法
    【转载】ST表
    串门赛: NOIP2016模拟赛——By Marvolo 丢脸记
    Bzoj 3813 奇数国 题解 数论+线段树+状压
    Bzoj 2064 分裂 题解
  • 原文地址:https://www.cnblogs.com/takeaction/p/3761697.html
Copyright © 2020-2023  润新知