• matlab练习程序(图像放大/缩小,双线性插值)


      半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用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))

    原图

     放大后的。

  • 相关阅读:
    LeetCode:Remove Nth Node From End of List
    LeetCode:Swap Nodes in Pairs
    LeetCode:Merge Two Sorted Lists
    LeetCode:Maximum Subarray
    LeetCode:Linked List Cycle
    LeetCode:Search Insert Position
    LeetCode:Roman to Integer
    算法程序设计题语言类笔记
    我的小游戏之2048
    LeetCode:Best Time to Buy and Sell Stock II
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2800201.html
Copyright © 2020-2023  润新知