在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
半年前写过matlab最邻近插值的图像缩放,没怎么考虑边界问题。更早之前用Opencv写过双线性插值图像放大,不过写的比较混乱。所以这里用matlab重新再清楚的写一遍。 1 close all;
2 clear all;
3 clc;
4
5 m=1.8; %放大或缩小的高度
6 n=2.3; %放大或缩小的宽度
7 img=imread('lena.jpg');
8 imshow(img);
9 [h w]=size(img);
10 imgn=zeros(h*m,w*n);
11 rot=[m 0 0;0 n 0;0 0 1]; %变换矩阵for i=1:h*m
12 for j=1:w*n
13 pix=[i j 1]/rot;
14
15 float_Y=pix(1)-floor(pix(1));
16 float_X=pix(2)-floor(pix(2));
17
18 if pix(1) < 1 %边界处理
19 pix(1) = 1;
20 end
21
22 if pix(1) > h
23 pix(1) = h;
24 end
25
26 if pix(2) < 1
27 pix(2) =1;
28 end
29
30 if pix(2) > w
31 pix(2) =w;
32 end
33
34 pix_up_left=[floor(pix(1)) floor(pix(2))]; %四个相邻的点
35 pix_up_right=[floor(pix(1)) ceil(pix(2))];
36 pix_down_left=[ceil(pix(1)) floor(pix(2))];
37 pix_down_right=[ceil(pix(1)) ceil(pix(2))];
38
39 value_up_left=(1-float_X)*(1-float_Y); %计算临近四个点的权重
40 value_up_right=float_X*(1-float_Y);
41 value_down_left=(1-float_X)*float_Y;
42 value_down_right=float_X*float_Y;
43 %按权重进行双线性插值
44 imgn(i,j)=value_up_left*img(pix_up_left(1),pix_up_left(2))+ ...
45 value_up_right*img(pix_up_right(1),pix_up_right(2))+ ...
46 value_down_left*img(pix_down_left(1),pix_down_left(2))+ ...
47 value_down_right*img(pix_down_right(1),pix_down_right(2));
48 end
49 end
50
51 figure,imshow(uint8(imgn))
原图 放大后的。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论