杨振宁大学物理视频中黄色的字去掉(机器视觉版本,六)

1,机器视觉形状匹配,首先要用roi抠图学习,roi就是感兴趣区域,这和人工智能的注意力机制一脉相承。

2,其次,就是学习canny线条,然后匹配,在人工智能上也有一个术语,和这个相似YOLO,you only look once ,意思是只需要看一眼就可以检测所有的目标。

先看图:

我们并没有使用鼠标去画一个roi框,但我们确实使用了一个矩形,框住了黄色字"资源库",并且处理了,学习后,canny线条(形状)结果图如下:

,好我们看,"在(440,340)学习**"按钮**做了什么?

//20241210

//第一,不gaos

//第二,截图

int xstart = Convert.ToInt32(textBox5x.Text);//440

int ystart = Convert.ToInt32(textBox5y.Text);///340

int temproiX = xstart;

int temproiY = ystart;

byte[] globgaospydoutimgN = 非极大抑制黑中白202210261519(rgbbufercopyR, 640, 480,.15f);

byte[] roiImage = new byte[120 * 60];

for (int i = 0; i < 60; i++)

for (int j = 0; j < 120; j++)//zhege roi 的宽和高就指定120,60,不再改变

{

int tihuan = (i + temproiY) * 640 + j + temproiX;

int tempij=i * 120 + j;

//roiImage[i * 120 + j] = globgaospydoutimgN[((i + temproiY) * 640 + j + temproiX)];

roiImage[tempij] = globgaospydoutimgN[tihuan];

}

看到没有,我们在(440,340)起点的矩形宽=120,高=60,图像抠出来并做了canny处理。

上面这个函数 **非极大抑制黑中白202210261519(...)**我就不介绍了,博客中搜得到。下一步:

List<List<Point>> llpgaos12896roi = new List<List<Point>>();

llpgaos12896roi.Clear();

int ww = 120; int hh = 60;

for (int i = 0; i < hh; i++)//****染色算法必须202209091600染色算法也隐含了白底黑斑

{//所以这里必须反色处理,负责没有结果//202209091606

roiImage[i * ww + 0] = 0;

roiImage[i * ww + ww - 1] = 0;

}

for (int j = 0; j < ww; j++)

{

roiImage[0 * ww + j] = 0;

roiImage[(hh - 1) * ww + j] = 0;

}

//染色算法黑中白(ref llpgaos12896roi, ref roiImage, ww, hh);//在边界崩溃了20220831

染色算法黑中白(ref llpgaos12896roi, ref roiImage, ww, hh,5);//点数大于等于5的线条,然后找出梯度门槛值

if (llpgaos12896roi.Count == 0) return;

showbuffer2pict(roiImage, 120, 60, pictureBox6);

第三,合并轮廓点

hebingllp1.Clear();

for (int i = 0; i < llpgaos12896roi.Count; i++)

{

for (int j = 0; j < llpgaos12896roi[i].Count; j++)

{

hebingllp1.Add(llpgaos12896roi[i][j]);//找出x,y中最大,最小,差值加一来确认宽和高202210261709

}

}

找出>=5的轮廓线条,并且把轮廓线条线条上的点合并

下面代码,找出轮廓中重要的特征,做了记录,准备存储下来,以备使用时加载。

//

匹配www = 120; 匹配hhh = 60;

第四,中心点和最长线梯度赋值最大点

int maxlineC = 0; int 计数 = 0;//位置

int jiluii = 0;

foreach (List<Point> templspt in llpgaos12896roi)

{

//轮廓中线条大于等于十个点的全部合并20230228

// list<Point> templspt = *iter;

int tempint = templspt.Count;

//int tempint = templspt.size();

// if (tempint < 5) { 计数++; continue; }

if (tempint > maxlineC)

{

maxlineC = tempint; jiluii = 计数; //jiluii =position,最大线条in roi的点数=maxlineC

}

计数++;

}

///

List<Point> templong = llpgaos12896roi[jiluii];

// int

maxtiduC = 0;

// int

jiluiitidupos =-1;

for (int i = 0; i < templong.Count; i++)

{

int fangbian = templong[i].Y * 120 + templong[i].X + temproiY * 640 + temproiX;

int gradx=rgbbufercopyR[fangbian+1]-rgbbufercopyR[fangbian];

int grady = rgbbufercopyR[fangbian+640] - rgbbufercopyR[fangbian];

int tidufuzhi = Math.Abs(gradx) + Math.Abs(gradx);

if (tidufuzhi > maxtiduC)

{

maxtiduC = tidufuzhi;

jiluiitidupos = i;

}

}

最长线梯度最大x = 0;

最长线梯度最大y = 0;

if (jiluiitidupos == -1) { MessageBox.Show("序号为负值"); return; }

最长线梯度最大x = templong[jiluiitidupos].X;

最长线梯度最大y = templong[jiluiitidupos].Y;

矩形中心

zhongxingray = 0;

zhongxingray = roiImage[30 * 120 + 60];

因为是0度匹配,这个学习就算完成了。保存轮廓和重要特征的代码如下,即图中"保存学习模板"按钮的代码:

string curFileName = "c:\\测试matchshape杨振宁.mch";

FileInfo fin = new FileInfo(curFileName);

FileStream fs1 = fin.Create();

//hebingllp1

if (hebingllp1.Count != 0)

{

int temp = hebingllp1.Count;

byte[] arrXY = new byte[temp * 2];

for (int i = 0; i < temp; i++)

{

arrXY[i] = (byte)hebingllp1[i].X;

arrXY[i + temp] = (byte)hebingllp1[i].Y;

}

fs1.Write(arrXY, 0, temp * 2);

fs1.Close();

}

else { return; }

XmlDocument xmlDoc = new XmlDocument();//實例化XML文件

XmlElement root = xmlDoc.CreateElement("Matchshape");

xmlDoc.AppendChild(root);

string str = string.Empty;

XmlElement xe1 = xmlDoc.CreateElement("Matchshaperoi");

root.AppendChild(xe1);

XmlElement xe = xmlDoc.CreateElement("最长线梯度最大X");

str = 最长线梯度最大x.ToString();

xe.InnerText = str;

xe1.AppendChild(xe);

xe = xmlDoc.CreateElement("最长线梯度最大Y");

str = 最长线梯度最大y.ToString();

xe.InnerText = str;

xe1.AppendChild(xe);

xe = xmlDoc.CreateElement("中心灰度");//byte,加载出现过负数,要注意

str = zhongxingray.ToString();

xe.InnerText = str;

xe1.AppendChild(xe);

//xe = xmlDoc.CreateElement("最长线梯度最大灰度");//知道不等于零即可!=0,不用保存此参数

//str = 最长线梯度最大灰度.ToString();

//xe.InnerText = str;

//xe1.AppendChild(xe);

//轮廓保存,参数保存以上3个,剩下五个都指定了,w=120,h=60,centrex=60,centrey=30,轮廓点数知道,mch长度除以2

xmlDoc.Save("c:\\matchshaperoi杨振宁" + ".xml");

相关推荐
机器视觉李小白4 天前
VisionPro 机器视觉控件篇 之 CogBlobTool 斑点工具
图像处理·人工智能·笔记·机器视觉·康耐视visionpro
机器视觉李小白9 天前
HALCON 算子 之 阈值分割算子
笔记·halcon·机器视觉
黄金小码农11 天前
成像报告撰写格式
机器视觉
抓哇能手24 天前
机器学习基础
人工智能·opencv·算法·机器学习·计算机视觉·机器视觉
友思特 智能感知1 个月前
友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!
视觉检测·机器视觉·光电·oct·光学相干断层扫描
51camera1 个月前
立体工业相机提升工业自动化中的立体深度感知
机器视觉·工业相机·工业自动化·3d视觉技术·立体工业相机
友思特 智能感知1 个月前
友思特应用 | 动态捕捉:高光谱相机用于移动产线上的食品检测
机器视觉·高光谱·高光谱相机·食品检测·食品分拣
友思特 智能感知2 个月前
友思特应用 | FantoVision边缘计算:多模态传感+AI算法=新型非接触式医疗设备
人工智能·边缘计算·机器视觉·图像采集
抓哇能手2 个月前
计算机视觉-显著性检测实验报告
人工智能·python·opencv·算法·计算机视觉·机器视觉