function pt=zoom1_4(p1)[m,n]=size(p1);for i=1:mif(mod(i,2)==0)for j=1:nif(mod(j,2)==0)pt(i/2,j/2)=p1(i,j);endendendend
end
>> I=imread('cameraman.tif');
>> pt=zoom1_4(I);
>> imshow(pt)
放大1.5倍涉及到了一些像素坐标取整的问题,包括像素个数等,实验中都选择了向下取整的办法,由于1.5倍取在四个像素中间,最近邻点可以选择多个节点,这里也统一采用向下取整的节点,以免边界溢出。
function pt=amp_neighbor(p1)[m1,n1]=size(p1);mt=floor(m1*1.5);nt=floor(n1*1.5);for i=1:mtfor j=1:ntpt(i,j)=p1(ceil(i/1.5),ceil(j/1.5));endend
end
>> I=imread('cameraman.tif');
>> pt=amp_neighbor(I);
>> imshow(pt)
像素个数操作同上,对于中间像素点的插值采用周围四个点,经过算术运算取均值的方法进行插值,按照PPT的ABCD四个点来编写函数。
function pt=amp_doublelinear(p1)[m1,n1]=size(p1);mt=floor(m1*1.5);nt=floor(n1*1.5);pt(1,1)=p1(1,1);pt(1,2)=p1(1,2);pt(2,1)=p1(2,1);for i=2:mtfor j=2:ntgf=(ceil(i/1.5)-(i/1.5))*(p1(floor(i/1.5),ceil(j/1.5))-p1(floor(i/1.5),floor(j/1.5)))+p1(floor(i/1.5),floor(j/1.5));ge=(ceil(i/1.5)-(i/1.5))*(p1(ceil(i/1.5),ceil(j/1.5))-p1(ceil(i/1.5),floor(j/1.5)))+p1(ceil(i/1.5),floor(j/1.5));pt(i,j)=(ceil(j/1.5)-j/1.5)*(gf-ge)+ge;endend
end
>> I=imread('cameraman.tif');
>> pt=amp_doublelinear(I);
>> imshow(pt)
本文发布于:2024-01-27 23:50:26,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063706263388.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |