2021亚太杯A题

举报
川川菜鸟 发表于 2022/04/14 02:10:34 2022/04/14
【摘要】 文章目录 第一问官方提到的两个算子第二问第三问 第一问官方提到的两个算子 声明一下:代码仅供参考,不保证完全正确。 题目中提到了canny算子边缘检测,我们先不管它有没有用,我把py...

第一问官方提到的两个算子

声明一下:代码仅供参考,不保证完全正确。

题目中提到了canny算子边缘检测,我们先不管它有没有用,我把python的代码先送给大家:python边缘检测

sobel算法也送大家:python sobel算法边缘检测

同时也提供了matlab版本:matlab 边缘检测的两种算法

再送大家一个新的代码:


clear
clc
X1=imread('Pic1_1.bmp');


imshow(X1)
title('原始图')
imhist(X1)%图像数据的直方图
title('直方图')
XX1=imbinarize(X1);%通过阈值化将二维灰度图像或三维体二值化
imshow(XX1)
title('灰度图')

Ig=XX1;
%获取算子
s=GetStrelList();
%串联去噪
e=ErodeList(Ig,s);
%计算权重
f=GetRateList(Ig,e);
%并联
Igo=GetRemoveResult(f,e);

%计算PSNR值
psnr1=PSNR(XX1,e.eroded_co12);
psnr2=PSNR(XX1,e.eroded_co22);
psnr3=PSNR(XX1,e.eroded_co32);
psnr4=PSNR(XX1,e.eroded_co42);
psnr5=PSNR(XX1,Igo);
psnr_list=[psnr1 psnr2 psnr3 psnr4 psnr5];
M{1,1}=e.eroded_co12;
M{1,2}=e.eroded_co22;
M{1,3}=e.eroded_co32;
M{1,4}=e.eroded_co42;
M{1,5}=Igo;

figure
plot(1:5,psnr_list,'r+-');
set(gca,'XTick',0:6,'XTickLabel',{'','串联1','串联2','串联3','串联4','并联',''});
grid on;
title('PSNR曲线比较')

[~,b]=max(psnr_list);
result=M{1,b};


figure

result=imbinarize(result,'adaptive');

Y1=bwperim(result);%在二进制图像中查找对象的周长
imshow(Y1)
title('边缘检测')

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

结果:
在这里插入图片描述
在这里插入图片描述
后面又要对直线曲线检测,直线建议使用:Matlab实现Hough变换检测图像中的直线,参考代码:

https://ww2.mathworks.cn/help/images/ref/houghlines.html?s_tid=doc_ta

  
 
  • 1

或者代码:

close all;
clear all;
I  = imread('scratch.tif');
figure;
subplot(1,3,1);
imshow(I);
BW = edge(I,'canny');%Canny方法提取图像边界,返回二值图像(边界1,否则0)
[H,T,R] = hough(BW);%计算二值图像的标准霍夫变换,H为霍夫变换矩阵,I,R为计算霍夫变换的角度和半径值
subplot(1,3,2);
imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');%hough变换的图像
xlabel('\theta'), ylabel('\rho');
axis on,axis square,hold on;
P  = houghpeaks(H,3);%提取3个极值点
x = T(P(:,2)); 
y = R(P(:,1));
plot(x,y,'s','color','white');%标出极值点
lines=houghlines(BW,T,R,P);%提取线段
subplot(1,3,3);
imshow(I), hold on;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
 plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');%画出线段
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');%起点
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');%终点
end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

不是要提取圆弧,直线轮廓嘛,找到一个还可以的链接,自己打开看看就知道了,具体怎么实现应该可以根据对应的函数百度,自己去实现:

http://blog.sina.com.cn/s/blog_c01c55220102ypsx.html

  
 
  • 1

在这里插入图片描述

第二问

图像校正简直如法炮制,直接参考链接:

https://blog.csdn.net/weixin_38285131/article/details/88732879

  
 
  • 1

在这里插入图片描述
轮廓长度…我也还不会,等更新哇

第三问

轮廓分割在第一问已经求出来了,如果你根据我的提示领悟好,你已经做出来了。

主要用到了什么?HALCON根据我的提示去领悟吧。(百度啊)

声明: 建议你不要把本篇文章内容传播给他人,仅订阅者观看,否则后果自负,我会要求官方读你发起律师函!

文章来源: chuanchuan.blog.csdn.net,作者:川川菜鸟,版权归原作者所有,如需转载,请联系作者。

原文链接:chuanchuan.blog.csdn.net/article/details/121551104

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。