找回密码
 立即注册
查看: 223|回复: 0

【图像措置】畸形图像矫正(Matlab代码实现)

[复制链接]
发表于 2024-7-15 18:18 | 显示全部楼层 |阅读模式
欢迎来到本博客❤️❤️  

  博主优势:   博客内容尽量做到思维缜密,逻辑清晰,为了便利读者。
/>
⛳️座右铭:行百里者,半于九十。
1 概述

结合当前时代科技成长程度分析,自从计算机、网络等普及后,很多技术在研究过程中都侧重智能化、自动化应用,数字图像措置技术也是如此,该技术主要是通过扫描、识别从而掌握图像信息特征,然后基于需求可进行复原、分割等操作,该技术主要优势是可最大限度保证图像清晰度和传输效率,基于这一特点在多范围展现独特的优势,在生物医学、工业工程、航空航天等均取得显著成果,在此结合当前实际应用情况,分析数字图形措置技术的特点和功能优势地址,并对其未来成长做出些许思考,以期为该项技术实现进一步成长提供撑持。生活中的畸形图像是由于针孔相机模型不考虑镜头畸变,相机的布局中存在着一些光学透镜,导致成像后的图像发生了扭曲,原本直立的高楼变得扭曲。图像畸变的原因有很多,此刻只考虑由于相机本身引起的畸变。
1,镜头畸变:透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的掉真;镜头的畸变分为径向畸变和切向畸变两类。
2,径向畸变:由透镜的形状引起的畸变称为径向畸变。即沿着透镜半径标的目的分布的畸变,发生原因是光线在道理透镜中心的处所比靠近中心的处所更加弯曲,这种畸变在普通廉价的镜头中表示更加明显。
本文将使用Matlab代码实现畸形图像的矫正!
2 运行成果











部门代码:
imglinear1=imread('linear.png');%自动标识表记标帜线性畸形标识表记标帜
imglinear=rgb2gray(imglinear1);
hlinear=[];
k=0;
[m,n]=size(imglinear);
for i=2:m-1%遍历寻找特征点
     for j=2:n-1
         if imglinear(i,j)~=imglinear(i+1,j+1)&&imglinear(i+1,j)==imglinear(i,j+1)&&imglinear(i,j)~=imglinear(i+1,j)&&imglinear(i+1,j)~=imglinear(i+1,j+1)
             k=k+1;
             hlinear=[hlinear;[i,j]];
         end
     end
end
figure(1);
imshow(imglinear1);
for i=1:k %特征点标识表记标帜数字
    s=sprintf('%d',i);
    text(hlinear(i,1),hlinear(i,2),s);
end
imgoriginal1=imread('orignal.png');%原始图像标识表记标帜特征点
imgoriginal=rgb2gray(imgoriginal1);
horiginal=[];
k=0;
[m,n]=size(imgoriginal);
for i=2:m-1
     for j=2:n-1
         if imgoriginal(i,j)~=imgoriginal(i+1,j+1)&&imgoriginal(i+1,j)==imgoriginal(i,j+1)&&imgoriginal(i,j)~=imgoriginal(i+1,j)&&imgoriginal(i+1,j)~=imgoriginal(i+1,j+1)
             k=k+1;
             horiginal=[horiginal;[i,j]];
         end
     end
end
figure(2);
imshow(imgoriginal1);
for i=1:k
    s=sprintf('%d',i);
    text(horiginal(i,1),horiginal(i,2),s);
end
imgcubic1=imread('cubic.png');%cubic图像手工标识表记标帜,导入.xlsx数据
figure(3);
imshow(imgcubic1);
[hcubic]=xlsread('cubic.xlsx') ;
for i=1:49
    s=sprintf('%d',i);
    text(hcubic(i,1),hcubic(i,2),s);
end
%以下为变换函数拟合过程
%calibration为变换函数,输入para为变换函数参数,X为原始点坐标
%由原始图片像素点计算得到变形图片对应坐标,颠末双线性变换后得到对应坐标点像素值,然后还原到原始图片像素点
para0=[1,1,1,0.1,0.1,0.1,0,0,0,0];%二维三阶函数拟合参数初始化
%四行代码分袂为计算三次、线性畸形x,y坐标二维三阶变换函数拟合参数
paracubicx=lsqcurvefit(@calibration, para0, horiginal, hcubic(:,1));
paracubicy=lsqcurvefit(@calibration, para0, horiginal, hcubic(:,2));
paralinearx=lsqcurvefit(@calibration, para0, horiginal, hlinear(:,1));
paralineary=lsqcurvefit(@calibration, para0, horiginal, hlinear(:,2));
piclinear=calibrate(paralinearx,paralineary,imglinear1);
figure(4);
imshow(piclinear);

piccubic=calibrate(paracubicx,paracubicy,imgcubic1);
figure(5);
imshow(piccubic);

function [ out ] = calibration( para, x )%calibration为变换函数,输入para为变换函数参数,X为原始点坐标
out = para(1)+para(2).*x(:,1)+para(3)*x(:,2)+para(4)*x(:,1).*x(:,2)+para(5).*x(:,1).*x(:,1)+para(6)*x(:,2).*x(:,2)+para(7).*x(:,1).*x(:,1).*x(:,2)...
+para(8).*x(:,1).*x(:,2).*x(:,2)+para(9).*x(:,1).*x(:,1).*x(:,1)+para(10).*x(:,2).*x(:,2).*x(:,2);
end
function [ out ] = calibrate( parax,paray, x )%calibration为变换函数,输入para为变换函数参数,x为畸形图像
out = zeros(size(x),'uint8');
[m,n,~]=size(x);
for i=1:m
    for j=1:n
        xx=round(calibration( parax, [i,j] ));
        yy=round(calibration( paray, [i,j] ));
        if i==121&&j==80
            c=1;
        end
        if xx>=1&&xx<=m&&yy<=n&&yy>=1
           out(i,j,:)=x(xx,yy,:);
        end
    end
end
end
3 参考文献
部门理论来源于网络,如有侵权请联系删除。
[1]欧冰,杨晶晶.数字图像措置技术现状与展望[J].中国新通信,2023,25(01):76-78.
[2]周克娟.Matlab数字图像措置与矩阵概念及运算教学的融合[J].广西广播电视大学学报,2022,33(05):27-32.
4 Matlab代码实现m

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-22 17:24 , Processed in 0.213624 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表