matlab练习程序(图像旋转,最邻近插值)
生活随笔
收集整理的這篇文章主要介紹了
matlab练习程序(图像旋转,最邻近插值)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
cl;
H=1; %索引pix中第一個(gè)元素,即高度
W=2; %索引pix中第二個(gè)元素,即寬度
jiaodu=45; %要旋轉(zhuǎn)的角度,旋轉(zhuǎn)方向?yàn)轫槙r(shí)針
img=imread('Corner.png'); %這里v為原圖像的高度,u為原圖像的寬度
imshow(img); %這里y為變換后圖像的高度,x為變換后圖像的寬度
[v u]=size(img);
theta=jiaodu/180*pi;
rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1];
inv_rot=inv(rot);
pix1=[1 1 1]*rot; %變換后圖像左上點(diǎn)的坐標(biāo)
pix2=[1 u 1]*rot; %變換后圖像右上點(diǎn)的坐標(biāo)
pix3=[v 1 1]*rot; %變換后圖像左下點(diǎn)的坐標(biāo)
pix4=[v u 1]*rot; %變換后圖像右下點(diǎn)的坐標(biāo)
height=round(max([abs(pix1(H)-pix4(H))+0.5 abs(pix2(H)-pix3(H))+0.5])); %變換后圖像的高度
width=round(max([abs(pix1(W)-pix4(W))+0.5 abs(pix2(W)-pix3(W))+0.5])); %變換后圖像的寬度
imgn=zeros(height,width);
delta_y=abs(min([pix1(H) pix2(H) pix3(H) pix4(H)])); %取得y方向的負(fù)軸超出的偏移量
delta_x=abs(min([pix1(W) pix2(W) pix3(W) pix4(W)])); %取得x方向的負(fù)軸超出的偏移量
for y=1-delta_y:height-delta_y
for x=1-delta_x:width-delta_x
pix=[y x 1]*inv_rot; %用變換后圖像的點(diǎn)的坐標(biāo)去尋找原圖像點(diǎn)的坐標(biāo),
%否則有些變換后的圖像的像素點(diǎn)無法完全填充
if pix(H)>=0.5 && pix(W)>=0.5 && pix(H)<=v && pix(W)<=u
imgn(y+delta_y,x+delta_x)=img(round(pix(H)),round(pix(W)));
end
end
end
figure,imshow(uint8(imgn))
H=1; %索引pix中第一個(gè)元素,即高度
W=2; %索引pix中第二個(gè)元素,即寬度
jiaodu=45; %要旋轉(zhuǎn)的角度,旋轉(zhuǎn)方向?yàn)轫槙r(shí)針
img=imread('Corner.png'); %這里v為原圖像的高度,u為原圖像的寬度
imshow(img); %這里y為變換后圖像的高度,x為變換后圖像的寬度
[v u]=size(img);
theta=jiaodu/180*pi;
rot=[cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1];
inv_rot=inv(rot);
pix1=[1 1 1]*rot; %變換后圖像左上點(diǎn)的坐標(biāo)
pix2=[1 u 1]*rot; %變換后圖像右上點(diǎn)的坐標(biāo)
pix3=[v 1 1]*rot; %變換后圖像左下點(diǎn)的坐標(biāo)
pix4=[v u 1]*rot; %變換后圖像右下點(diǎn)的坐標(biāo)
height=round(max([abs(pix1(H)-pix4(H))+0.5 abs(pix2(H)-pix3(H))+0.5])); %變換后圖像的高度
width=round(max([abs(pix1(W)-pix4(W))+0.5 abs(pix2(W)-pix3(W))+0.5])); %變換后圖像的寬度
imgn=zeros(height,width);
delta_y=abs(min([pix1(H) pix2(H) pix3(H) pix4(H)])); %取得y方向的負(fù)軸超出的偏移量
delta_x=abs(min([pix1(W) pix2(W) pix3(W) pix4(W)])); %取得x方向的負(fù)軸超出的偏移量
for y=1-delta_y:height-delta_y
for x=1-delta_x:width-delta_x
pix=[y x 1]*inv_rot; %用變換后圖像的點(diǎn)的坐標(biāo)去尋找原圖像點(diǎn)的坐標(biāo),
%否則有些變換后的圖像的像素點(diǎn)無法完全填充
if pix(H)>=0.5 && pix(W)>=0.5 && pix(H)<=v && pix(W)<=u
imgn(y+delta_y,x+delta_x)=img(round(pix(H)),round(pix(W)));
end
end
end
figure,imshow(uint8(imgn))
總結(jié)
以上是生活随笔為你收集整理的matlab练习程序(图像旋转,最邻近插值)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言文件操作解析(二)
- 下一篇: matlab练习程序(简单图像融合)