clc;%清空命令窗口
clear all;%清除工作空间
%%%%%%%%%%%图像旋转算法%%%%%%%%%%%%%%%%%
%%%%%%%%%图像读取开始%%%%%%%%%%%%
f=imread('D:\图像处理\测试图\11.bmp');%读取图像并将图像保存在f中,此时f为图像保存8位格式
f1=double(f);%图像8位格式f转化为数值矩阵f1,通过工作空间查看f1大小为 512*512*3 的数值矩阵
figure(1)%申请画布1
imshow(uint8(f1));%显示原图像
title('原图像');%给原图像加标题
%%%%%彩色图像的分解%%%%%%%
%即将彩色图像分解为三个灰度图,三个灰度图分别表示red分量,green分量,blue分量
r1=f1(:,:,1);%将彩色图像中的第一通道矩阵赋给r1;
g1=f1(:,:,2);%将彩色图像中的第二通道矩阵赋给g1;
b1=f1(:,:,3);%将彩色图像中的第三通道矩阵赋给b1;
%%%%%彩色图像分解结束%%%%%%
%%%%%%%%%图像读取并显示原图结束%%%%%%%%%%%
%%%%%%%%%图像算法处理开始%%%%%%%%%%%%%%
%确定新画布的大小;
[m,n]=size(r1);%获得r1矩阵的大小,m*n维
%a=0.8*pi;
a=input('输入你要旋转的弧度a(a<2*pi):');
if a<=0.5*pi%判断旋转角度所属象限
i3=round(cos(a)-sin(a)*n);%i的最小值-226(以协助45度为例)横坐标需要平移
i2=round(cos(a)*m-sin(a));%i的最大值169
j3=round(cos(a)+sin(a));%j的最小值1
j2=round(cos(a)*m+n*sin(a));%j的最大值396
else if a<=pi
i3=round(m*cos(a)-sin(a)*n);%i的最小值-379
i2=round(cos(a)-sin(a));%i的最大值-1
j3=round(sin(a)+n*cos(a));%j的最小值-98,横,纵坐标都需要平移
j2=round(m*sin(a)+cos(a));%j的最大值228
else if a<=1.5*pi
i3=round(m*cos(a)-sin(a));%i的最小值-194(以旋转1.2*pi为例)
i2=round(cos(a)-sin(a)*n);%i的最大值187
j3=round(m*sin(a)+n*cos(a));%j的最小值-400,横,纵坐标都需要平移
j2=round(sin(a)+cos(a));%j的最大值-1
else if a<=2*pi
i3=round(cos(a)-sin(a));%i的最小值1(以1.8*pi为例)
i2=round(m*cos(a)-n*sin(a));%i的最大值382
j3=round(m*sin(a)+cos(a));%j的最小值-140,纵坐标需要平移
j2=round(sin(a)+n*cos(a));%j的最大值258
end
end
end
end
m1=i2-i3;n1=j2-j3;%新画布大小
r2=zeros(m1,n1);%申请新的图像矩阵m*n维,初始化全为0
g2=zeros(m1,n1);
b2=zeros(m1,n1);
%%%%%%%%%%%%%%%旋转算法%%%%%%%%%%%%%
%%%%坐标平移%%%
for i=1:m
for j=1:n
if a<=0.5*pi
i1=round(i*cos(a)-j*sin(a))-i3+1;
j1=round(i*sin(a)+j*cos(a));
else if 0.5*pi<a<=1.5*pi
i1=round(i*cos(a)-j*sin(a))-i3+1;
j1=round(i*sin(a)+j*cos(a))-j3+1;
else if 1.5*pi<a<=2*pi
i1=round(i*cos(a)-j*sin(a));
j1=round(i*sin(a)+j*cos(a))-j3+1;
end
end
end
r2(i1,j1)=r1(i,j);
g2(i1,j1)=g1(i,j);
b2(i1,j1)=b1(i,j);
end
end
%%%%%%后期处理:均匀插值处理%%%%%%%
for i=2:m1-1
for j=2:n1-1
if r2(i,j)==0
r2(i,j)=(r2(i-1,j)+r2(i,j-1)+r2(i,j+1)+r2(i+1,j))/4;
end
end
end
for i=2:m1-1
for j=2:n1-1
if g2(i,j)==0
g2(i,j)=(g2(i-1,j)+g2(i,j-1)+g2(i,j+1)+g2(i+1,j))/4;
end
end
end
for i=2:m1-1
for j=2:n1-1
if b2(i,j)==0
b2(i,j)=(b2(i-1,j)+b2(i,j-1)+b2(i,j+1)+b2(i+1,j))/4;
end
end
end
%%%%%%%%%图像算法处理结束%%%%%%%%%%%%%%
%%%%%%%%%图像结果显示开始%%%%%%%%%%%%%%%
figure(2)%申请画布2
%%%%%%将三个灰度图合并为一个彩色图像开始%%%%%%%%%%
f2(:,:,1)=r2;%将处理以后的第一通道的结果赋给f2的第一通道
f2(:,:,2)=g2;%将处理以后的第二通道的结果赋给f2的第二通道
f2(:,:,3)=b2;
%%%%%%合并为一个彩色图像结束%%%%%%%%%%
imshow(uint8(f2));%显示f2矩阵对应图像即旋转结果
title('旋转结果');
%%%%%%%%%图像结果显示结束%%%%%%%%%%%%%%%
Matlab3.rar_四象限旋转角_旋转四象限
版权申诉
60 浏览量
2022-09-23
12:19:17
上传
评论
收藏 2KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+
最新资源
- Android面试题.txt
- chujuyingshi1129802.apk
- 865804808983585自动化办公必备numpy、pandas数据处理课件.zip
- Fences 5是一款桌面整理软件,主要用于Windows操作系统,能够帮助用户更有效地管理和组织桌面上的图标和文件
- Appium入门 appium-desktop安装包,下载即可安装使用
- 初步图优化之后的fb bev 结构图
- 爬取cnnvd网站代码最新的 2024年
- 资源专区-毕业设计-数据分析-CRM客户关系管理系统
- 毕业设计-使用Matlab基于遗传算法+非线性规划实现的函数寻优算法-附项目源码.zip
- api接口python.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈