历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | 飞思卡尔--Matlab图像矫正估算赛道长度

2021-08-26 来源:eefocus

由于参加飞思卡尔智能车比赛,铺赛道变成了一个重要的环节。而此次铺赛道用了过去留下的赛道进行拼接,导致赛道的长度不好计算,因此,博主与小伙伴想了一些办法估算长度,下面介绍Matlab图像矫正估算赛道长度的方法。


首先由于赛道过长的原因,无法获得整个赛道的图,俯视图则更不为可能。因此,本次方法为采集两张图片进行分别处理计算再相加。图片如下图所示。代码在文末链接,供参考改进。

 

接着我们截取我们需要的部分(以下以一边赛道为例)。

1.然后我们取该赛道的灰度值

2.接着再进行图像的矫正

3.进行初次的去噪(补充横线的白点)

4.对全黑的矩阵用双线法进行补充。(此处为关键,也可用最近邻插值法,由于博主在此处的算法较为粗略,因此算法复杂度高,且处理效果一般,改进空间较大)

5.对改图进行二值化

6.观察图像,再次去噪

7.最终效果图(该图左边反光较大,可再次进行处理)

PS:下图为用PS矫正后的图像(效果更好)。

用同样的方法可以得出另一半赛道的图片。

得出了二值化的矩阵之后,可利用面积法算出赛道的长度。首先计算出所有白点的个数。由于赛道的宽度是已知的(去掉两边的路肩共40cm),于是可以取一小段直道取其行的平均值,就可以算出赛道的宽度共占多少个像素点,也就可以算出一个像素点占多大的长度,再用总像素点除以每行所占像素点再乘以每个像素点的长度,即可大致得出赛道长度(由于再某些地方(十字和环岛)白像素点重叠了,因此最后再加上这些值即为赛道总长度。


用改方法算出的赛道长度大约为55米左右,用PS矫正后的图片则算出57米左右,而用车跑圈,利用编码器计数则算出56米左右。可见该方法还是存在一定的可行性的。


clear clc

point = 1.5;

point_long = 5;

value = 0.38 * 255;%初次去噪阈值

value2 = 0.45;%二次去噪阈值


%%%%%%%%%%%%%%%%读图%%%%%%%%%%%%%%%%

img= imread('2222.jpg?imageView2/2/w/550');

img = rgb2gray(img);%求灰度值

imshow(img);


[left,down] = size(img);%读取图像大小

left1 = 800;%定义新矩阵长度

down1 = ceil((down / 2) * point * 2);%定义矩阵长度

img2 = uint8(zeros(left1,down1));%创建全黑矩阵

flag = down / 2; 

flag2 = down1 / 2;


left_last = 1;

left_ans = 1;

%%%%%%%%%%%%%%%%图像透视变换%%%%%%%%%%%%%%%%

for n = 1:left

    point_left = ((left - n) * ((point - 1) / (left - 1))) + 1;

    if n == 1

    else

        dis_bet = (point_long / (left - 1)) * (left - n) * 1 + 1;

        left_ans = round(left_last + dis_bet);

        left_last = left_ans;

    end

    for m = (down/2) : down

        down_flag = (m - flag) * point_left + flag2;

        down_ans = round(down_flag);

        img2(left_ans,down_ans) = img(n,m);

    end

    for m = 1 : (down/2)

        down_flag = flag2 - (flag - m) * point_left;

        down_ans = round(down_flag);

        img2(left_ans,down_ans) = img(n,m);

    end

end

figure

imshow(img2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%初次去噪,将黑点变全白%%%%%%%%%%%%%%%%

for n = 1:(left_last)

    for m = 3:(down1)

        if (img2(n,m-2) >= value ) && (img2(n,m-1)

            img2(n,m-1) = 255;  

        end

    end

end

figure

imshow(img2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%双线性填充图像%%%%%%%%%%%%%%%%

for n = 5:(left_last - 2)

    for m = 5:(down1 - 2)

        if img2(n,m) == 0

            sum = img2(n-1,m-1) + img2(n+1,m+1) + img2(n-1,m+1) + img2(n+1,m-1);

            point_num = sum / 2;

            img2(n,m) = point_num;

        end

    end

end

figure

imshow(img2);

I2 = im2bw(img2,value2);%二值化

figure

imshow(I2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%二次去噪1%%%%%%%%%%%%%%%%

for n = 3:(left_last)

    for m = 3:(down1)

        if (I2(n-2,m) ==  0) && (I2(n-1,m) == 1) && (I2(n,m) == 0)

            I2(n-1,m) = 0;

        end

    end

end

figure

subplot(2,2,1);imshow(I2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%二次去噪2%%%%%%%%%%%%%%%%

for n = 3:(left_last)

    for m = 3:(down1)

        if (I2(n,m-2) ==  0) && (I2(n,m-1) == 1) && (I2(n,m) == 0)

            I2(n,m-1) = 0;  

        end

    end

end

subplot(2,2,2);imshow(I2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%二次去噪3%%%%%%%%%%%%%%%%

for n = 3:(left_last)

    for m = 3:(down1)

        if (I2(n,m-2) ==  1) && (I2(n,m-1) == 0) && (I2(n,m) == 1)

            I2(n,m-1) = 1;  

        end

    end

end

subplot(2,2,3);imshow(I2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%二次去噪4%%%%%%%%%%%%%%%%

for n = 3:(left_last)

    for m = 3:(down1)

        if (I2(n-2,m) ==  0) && (I2(n-1,m) == 1) && (I2(n,m) == 0)

            I2(n-1,m) = 0;

        end

    end

end

subplot(2,2,4);imshow(I2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure

imshow(I2);


white = 0;

for n = 1:left_ans

    for m = 1:down1

        if I2(n,m) == 1

            white = white + 1;

        end

    end

end

推荐阅读

史海拾趣

Analogic Corporation公司的发展小趣事

Analogic Corporation 是一家总部位于美国马萨诸塞州的跨国公司,成立于1967年,主要从事医疗影像和航空安全领域的高性能技术产品的设计、制造和销售。以下是 Analogic Corporation 公司发展的相关故事:

  1. 成立与初期阶段:Analogic Corporation 成立于1967年,由 Bernard M. Gordon 博士和 Raymond J. Stata 博士等人共同创立。公司最初的业务重点是设计和制造用于医学影像诊断的模拟计算机设备。这些设备利用先进的模拟电子技术,帮助医生进行 X 射线、超声波和核磁共振成像等医学检查。

  2. 技术创新与产品优化:Analogic Corporation 在技术创新方面一直处于行业前沿。公司不断投入研发,并开发出一系列先进的医疗影像产品和航空安全技术。其产品包括 CT 扫描仪、核磁共振成像设备、安全检测设备等。这些产品以其高分辨率、高性能和可靠性而闻名,被广泛应用于医疗保健和安全检测领域。

  3. 市场拓展与全球业务:Analogic Corporation 在全球范围内建立了广泛的销售网络和合作伙伴关系。公司的产品远销世界各地,包括北美、欧洲、亚洲等地区。通过与国际合作伙伴的合作,Analogic Corporation 不断拓展业务范围,提升产品的市场占有率和影响力。

  4. 应用领域与客户合作:Analogic Corporation 的产品被广泛应用于医疗保健和航空安全领域。公司与全球各大医院、诊所、航空公司和安检机构等客户建立了长期稳定的合作关系。通过与客户的紧密合作,Analogic Corporation 不断了解市场需求,提供定制化的解决方案,满足客户的特定需求。

  5. 持续发展与未来展望:作为一家具有悠久历史和丰富经验的公司,Analogic Corporation 将继续致力于技术创新和产品研发,以满足不断变化的市场需求。公司将继续加强与客户和合作伙伴的合作关系,不断拓展业务领域,进一步提升产品性能和服务水平。在未来,Analogic Corporation 将继续保持行业领先地位,为客户提供更加优质和可靠的解决方案。

登丰微(GSTEK)公司的发展小趣事

歌普电子深知技术创新的重要性,因此不断加大在研发方面的投入。公司拥有一支卓越的研发团队,能够设计出先进而成熟的产品方案,并配备了精密模具制造、高速连续冲压等先进生产设备。这些努力使得歌普的产品不仅获得了多项国际安全认证及外观设计专利,还成功与国际品牌连接器相兼容。随着产品的不断优化和升级,歌普的产品远销全球多个工业国家及地区,赢得了良好的国际声誉。

Danube Enterprise Co Ltd公司的发展小趣事

随着市场的竞争日益激烈,Danube意识到单纯的技术创新已经不足以支撑公司的长远发展。于是,公司开始注重产品的品质和品牌的塑造。他们引进了先进的生产设备和质量管理体系,对每一个环节都进行严格把控,确保每一件产品都符合高标准的质量要求。同时,Danube还加大了品牌宣传的力度,通过参加国际电子展、赞助体育赛事等方式,提高了品牌的知名度和美誉度。这些努力让Danube的产品在市场上获得了更多的认可,公司的业务规模也逐渐扩大。

Dawn Electronics Inc公司的发展小趣事

随着市场的不断发展,Dawn Electronics Inc公司意识到技术创新的重要性。公司加大了研发投入,成立了专门的研发团队,积极探索新的技术方向。经过不懈的努力,公司成功研发出了一种新型的智能传感器,具有更高的精度和更低的功耗,这一创新技术迅速被市场接受,为公司带来了可观的收益。

亿晶源(ekinglux)公司的发展小趣事

在不断提升产品质量和创新能力的同时,亿晶源还积极拓展市场。公司先后在华南、华东等地区设立生产基地和销售中心,形成了覆盖全国的销售网络。同时,公司还注重品牌建设,通过参加国内外知名展会、举办技术交流会等活动,提升品牌知名度和影响力。

中环(Central)公司的发展小趣事

中环公司的前身可以追溯到1958年成立的天津市半导体材料厂。随着技术的不断进步和市场需求的增长,公司在1978年开始涉足区熔单晶硅制造领域,并于1981年正式进入太阳能单晶硅制造领域,成为国内最早涉足光伏领域的企业之一。这一转变不仅体现了中环对市场趋势的敏锐洞察,也为其后续在光伏领域的发展奠定了坚实的基础。

问答坊 | AI 解惑

飞思卡尔单片机_SDIDE软件

飞思卡尔单片机_SDIDE软件 …

查看全部问答>

如何推广EEWORLD

1.登陆EEWORLD论坛,进入旧版首页,在右上角找到“控制面板”,点击控制面板,如下图: 2.点击“访问推广”,进入如下图所示界面: 按照提示操作,将您的推广链接1或者2均可,发送给您的朋友,当您的朋友访问该链接,并注册成为新会员, ...…

查看全部问答>

如何获取已经打开的串口句柄?

    各位,如何获取已经打开的串口句柄?     望执教!…

查看全部问答>

ARM9外中断问题

U8 key; U8 Key_Scan( void ) {         Delay( 80 ) ;         if(      (rGPGDAT&(1…

查看全部问答>

驱动加载程序中,在StartService()后,通过GetLastError()返回3错误(〖3〗-系统找不到指定的路径。)

    驱动加载程序中,在StartService()后,通过GetLastError()返回3(〖3〗-系统找不到指定的路径。)    在虚拟机运行的,一开始是好的,暂停第二次打开 ,无论如何加载时运行到StartService()后的GetLastError()返回都是 ...…

查看全部问答>

寻:windows ce驱动及底层开发人员

现有一国外项目需要有windows ce驱动或底层开发经验的人, 有意者请msn或邮件联系:jackin_lau@hotmail.com…

查看全部问答>

也来秀一下DIY,160*80带触摸液晶模块做的多功能时钟~~~~~~

哈哈,其实这个屏是去年电赛的时候买的,正好也用上了,不过用得比较简单,感觉有点可惜了就干脆做了一个完整的模块,估计有的朋友还记得之前小弟发的第一次做PCB的帖子吧,就是给这个做的,这个是当时的链接 https://bbs.eeworld.com.cn/thre ...…

查看全部问答>

TL494制作的恒流限压充电器电路

      我按照图上的电路做了一个充电器(图中的r12,r20我改为两个0.1/5w的电阻了),充10AH/24V的镍氢动力电池,但是在试验中发现随着充电电压的升高,电流在慢慢下降,达不到恒流,例如:24v电池理论充电终止电压是29v,但是在电 ...…

查看全部问答>

micrf506

用起来比较麻烦,但不加PA情况下可以到450米(实测)。…

查看全部问答>