%***********************************操作初始化******************************
point = imread('C:\Documents and Settings\HQ_Turtle\桌面\point.bmp');%读入测试靶图像point.bmp
point_sp = imread('C:\Documents and Settings\HQ_Turtle\桌面\point_sp.bmp');%读入测试靶变化后的图像point_sp.bmp
tiger_sp = imread('C:\Documents and Settings\HQ_Turtle\桌面\tiger_sp.bmp');%读入变化后的老虎图像tiger_sp.bmp
point_sp(7,91)=1;
point_sp(16,104)=1;
point_sp(39,122)=1;
point_sp(26,113)=1;
point_sp(7,37)=1;
point_sp(16,24)=1;
point_sp(39,6)=1;
point_sp(26,15)=1;
point_sp(121,91)=1;
point_sp(112,104)=1;
point_sp(89,122)=1;
point_sp(102,113)=1;
point_sp(121,37)=1;
point_sp(112,24)=1;
point_sp(89,6)=1;
point_sp(102,15)=1;
%**************************对输入的原图进行压缩******************************
%point.bmp为128×128,tiger_sp.bmp为176×216,压缩tiger_sp到128×128
tigerChange = zeros(128,128);%保存压缩后的tiger_sp(原图)
%按照线性插值,输出图像点(x,y)的值由输入图像四点(a,b),(a+1,b)、(a,b+1)和(a+1,b+1)决定,从而计算压缩图像tigerChange(x,y)的值
for x = 1:1:128
for y = 1:1:128
a1 = double((x-1)*216/128)+1; %即代表a+1
b1 = double((y-1)*176/128)+1; %即代表b+1
a = floor(a1); %取a1的下整,即为a
b = floor(b1); %取b1的下整,即为b
%越界处理
if( a >= 216 )
a = 215;
end
if( b >= 176 )
b = 175;
end
%用双线性插值法求的tigerChange(x,y)
temp = (double(tiger_sp(a+1,b))-double(tiger_sp(a,b)))*(a1-a);
temp = temp+(double(tiger_sp(a,b+1))-double(tiger_sp(a,b)))*(b1-b);
temp = temp+(double(tiger_sp(a+1,b+1))+double(tiger_sp(a,b))-double(tiger_sp(a+1,b))-double(tiger_sp(a,b+1)))*(a1-a)*(b1-b);
tigerChange(x,y) = round(temp+double(tiger_sp(a,b)));
end
end
%进行类型转换,uint8类型
tigerChange = uint8(tigerChange);
%************************细化point_sp.bmp,抽取其黑点***********************
%找到point_sp.bmp中黑色(非白色)的点
Xsp_BlackPoint = zeros(12,12);%创建矩阵空间记录黑点的横坐标
Ysp_BlackPoint = zeros(12,12);%创建矩阵空间记录黑点的纵坐标
Xsp_BlackPoint = reshape(Xsp_BlackPoint,1,144);%将矩阵转换为1*144的一维向量方便使用
Ysp_BlackPoint = reshape(Ysp_BlackPoint,1,144);%将矩阵转换为1*144的一维向量方便使用
pointRecord = zeros(128,128);%创建矩阵空间,标记点(x,y)是否已经访问过
%Xsum、Ysum、count用于抽取一个平均值
Xsum = 0;
Ysum = 0;
count = 0;
k = 1;
%抽取各个黑点的坐标
for i = 1:1:128
for j = 1:1:128
if pointRecord(i,j) == 0
%对非白点处理
if point_sp(i,j) < 125
Xsum = i;
Ysum = j;
count = count+1;
pointRecord(i,j) = 1;
%检查其周围的点是否为非白点
if i == 1 || j == 1 || i == 128 || j == 128%排除边界
else
%如果该点周围8个点有访问过,则跳过处理
if pointRecord(i+1,j) == 1 ||...
pointRecord(i-1,j) == 1 ||...
pointRecord(i,j+1) == 1 ||...
pointRecord(i,j-1) == 1 ||...
pointRecord(i-1,j-1) == 1 ||...
pointRecord(i+1,j-1) == 1 ||...
pointRecord(i-1,j+1) == 1 ||...
pointRecord(i+1,j+1) == 1
%将Xsum、Ysum、count置为初始值
Xsum = 0;
Ysum = 0;
pointRecord(i,j) = 1;
count = 0;
else %否则可以进行如下抽取,将该点周围8个点中是灰色的点加进来平均
%正下方
new_i = i; new_j = j;
while point_sp(new_i+1,new_j) < 125
Xsum = Xsum+new_i+1;
Ysum = Ysum+new_j;
count = count+1;
pointRecord(new_i+1,new_j) = 1;
new_i = new_i+1;
end
%正上方
new_i = i; new_j = j;
while point_sp(new_i-1,new_j) < 125
Xsum = Xsum+new_i-1;
Ysum = Ysum+new_j;
count = count+1;
pointRecord(new_i-1,new_j) = 1;
new_i = new_i-1;
end
%正右方
new_i = i; new_j = j;
while point_sp(new_i,new_j+1) < 125
Xsum = Xsum+new_i;
Ysum = Ysum+new_j+1;
count = count+1;
pointRecord(new_i,new_j+1) = 1;
new_j = new_j+1;
end
%正左方
new_i = i; new_j = j;
while point_sp(new_i,new_j-1) < 125
Xsum = Xsum+new_i;
Ysum = Ysum+new_j-1;
count = count+1;
pointRecord(new_i,new_j-1) = 1;
new_j = new_j-1;
end
%左上方
new_i = i; new_j = j;
while point_sp(new_i-1,new_j-1) < 125
Xsum = Xsum+new_i-1;
Ysum = Ysum+new_j-1;
count = count+1;
pointRecord(new_i-1,new_j-1) = 1;
new_i = new_i-1;
new_j = new_j-1;
end
%右上方
new_i = i; new_j = j;
while point_sp(new_i-1,new_j+1) < 125
Xsum = Xsum+new_i-1;
Ysum = Ysum+new_j+1;
count = count+1;
pointRecord(new_i-1,new_j+1) = 1;
new_i = new_i-1;
new_j = new_j+1;
end
%左下方
new_i = i; new_j = j;
while point_sp(new_i+1,new_j-1) < 125
Xsum = Xsum+new_i+1;
Ysum = Ysum+new_j-1;
count = count+1;
pointRecord(new_i+1,new_j-1) = 1;
new_i = new_i+1;
new_j = new_j-1;
end
%右下方
new_i = i; new_j = j;
while point_sp(new_i+1,new_j+1) < 125
Xsum = Xsum+new_i+1;
Ysum = Ysum+new_j+1;
count = count+1;
pointRecord(new_i+1,new_j+1) = 1;
new_i = new_i+1;
new_j = new_j+1;
end
%然后将其进行平均
Xsum = fix(Xsum/count);
Ysum = fix(Ysum/count);
Xsp_BlackPoint(k) = Xsum;
Ysp_BlackPoint(k) = Ysum;
k = k+1;
%%将Xsum、Ysum、count置为初始值
Xsum = 0;Ysum = 0;count = 0;
end
end
end
end
end
end
%将二者复
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB实现的编写实现图像几何校正的程序,根据靶图将tiger图像从鱼眼形变恢复+使用说明文档.rar
共4个文件
m:3个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 99 浏览量
2024-05-22
17:16:55
上传
评论
收藏 9KB RAR 举报
温馨提示
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的编写实现图像几何校正的程序,根据靶图将tiger图像从鱼眼形变恢复+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB实现的编写实现图像几何校正的程序,根据靶图将tiger图像从鱼眼形变恢复+使用说明文档.rar (4个子文件)
pointRow.m 584B
pointCol.m 556B
使用说明文档.md 13KB
Restitute.m 20KB
共 4 条
- 1
资源评论
IT狂飙
- 粉丝: 4778
- 资源: 2640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功