激光条纹中心提取——zhang细化+灰度重心法

该博客介绍了使用Zhang-Suen细化算法对激光光条进行细化,然后结合灰度重心法进行亚像素提取的过程。通过OpenCV库实现图像处理,代码包括细化算法的实现和灰度重心法的运用,以提高线条定位精度。然而,这种方法对某些数据集可能不够理想。
摘要由CSDN通过智能技术生成

优秀的zhang-suen细化+灰度重心法

先用zhang-suen细化对激光光条做细化,然后在使用灰度重心法可以达到亚像素提取,精度还是可以的,但是对我的数据集不是很友好,代码是看其他博主的,代码可以参考代码连接----------论文连接
在这里插入图片描述

上代码

#include<opencv2/core/core.hpp>
#include<opencv2/calib3d/calib3d.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
#include<fstream>
#include<stdlib.h>


using namespace std;
using namespace cv;


//-------------------------------------------zhang细化算法----------------------------------------------//
void zhang(Mat& input, Mat& output)
{
   
	Mat copymat;
	input.copyTo(copymat);
	int k = 0;
	//防止溢出
	while (1)
	{
   
		k++;
		bool stop = false;
		//step1
		for (int i = 1; i < input.cols - 1; i++)
			for (int j = 1; j < input.rows - 1; j++)
			{
   
				if (input.at<uchar>(j, i) > 0)
				{
   
					int p1 = int(input.at<uchar>(j, i)) > 0 ? 1 : 0;
					int p2 = int(input.at<uchar>(j - 1, i)) > 0 ? 1 : 0;
					int p3 = int(input.at<uchar>(j - 1, i + 1)) > 0 ? 1 : 0;
					int p4 = int(input.at<uchar>(j, i + 1)) > 0 ? 1 : 0;
					int p5 = int(input.at<uchar>(j + 1, i + 1)) > 0 ? 1 : 0;
					int p6 = int(input.at<uchar>(j + 1, i)) > 0 ? 1 : 0;
					int p7 = int(input.at<uchar>(j + 1, i - 1)) > 0 ? 1 : 0;
					int p8 = int(input.at<uchar>(j, i - 1)) > 0 ? 1 : 0;
					int p9 = int(input.at<uchar>(j - 1, i - 1)) > 0 ? 1 : 0;
					int np1 = p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9;
					int sp2 = (p2 == 0 && p3 == 1) ? 1 : 0;
					int sp3 = (p3 == 0 && p4 == 1) 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值