菜鸡的灰度重心法 灰度重心法的概念就不用我多哔哔了,做激光中心提取的同学都知道,灰度重心法应该说是最早的一种光条中心提取算法了,顾名思义就是根据灰度值的分布求出中心,所以往往要求灰度分布成高斯分布,但是实际情况是相反的,所以这种方法就只歇着,不过有很多灰度中心法结合或者改进比较常看到。
文章图片
上代码
#include
#include
#include
#include
using namespace cv;
using std::vector;
using namespace std;
// 灰度重心法
void GGM(Mat src, int i) {
Mat srcimg;
srcimg = src;
Mat grayimg;
cvtColor(srcimg, grayimg, CV_BGR2GRAY);
GaussianBlur(grayimg, grayimg, Size(0, 0), 6, 6);
//traverse each column
float x0 = 0;
for (int i = 0;
i < grayimg.cols;
i++) {
float sum_value = https://www.it610.com/article/0;
float sum_valuecoor = 0;
vectorcurrent_value;
vectorcurrent_coordinat;
for (int j = 0;
j < grayimg.rows;
j++) {
float current = grayimg.at(j, i);
//Save the point gray value and coordinates of the threshold into the array
if (current > 30) {
current_value.push_back(current);
current_coordinat.push_back(j);
}
}
//Calculate the gray center of gravity
for (int k = 0;
k < current_value.size();
k++) {
sum_valuecoor += current_value[k] * current_coordinat[k];
sum_value += current_value[k];
}
float x = sum_valuecoor / sum_value;
x0 = x;
circle(srcimg, Point(i, x), 1, Scalar(0, 0, 255), -1, 8);
current_value.clear();
current_coordinat.clear();
}
namedWindow("gscog", 0);
resizeWindow("gscog", 800, 600);
imshow("gscog", srcimg);
string save_path = ".\\RailTurnout\\center\\" + to_string(i) + ".png";
cout << save_path << endl;
imwrite(save_path, srcimg);
waitKey(10);
}
int main() {
// 相对对路径
string path = ".\\RailTurnout\\result\\*.png";
cout << path << endl;
vector images;
vector> fn;
glob(path, fn, false);
cout << fn.size() << endl;
size_t count = fn.size();
cout << count << endl;
for (int i = 0;
i < count;
i++) {
images.push_back(imread(fn[i]));
GGM(images[i], i);
/*imshow("pic", images[i]);
waitKey(10);
*/
}
system("pause");
return 0;
}
贴结果
文章图片
左边是没有经过深度学习去噪处理的,右边是采用深度学习去噪处理的
【激光条纹中心提取|激光条纹中心提取——灰度重心法】我建立了一个激光条纹提取的群,欢迎小伙伴加入,学习交流:点击链接加入群聊【激光条纹中心提取】 先申明本人是学生,不涉及营销、宣传、推广、盈利,单纯为了学习交流,所以心怀不轨的请绕道!!!
文章图片
推荐阅读
- 计算机视觉|平均池化和最大池化分别适用于什么场景呢()
- QT|QT中自定义注释模板整理
- 记录|Qt自定义控件-----仿B站标签创建框
- qt|C++图形用户界面开发框架Qt 6.x入门级教程 - 开发工具简介
- Qt基础|c++ qt自定义搜索编辑框
- c++|2011-2012工作总结
- c++|PTA堆栈—有效括号判断
- codeforce|Codeforces Round #774 (Div. 2) D. Weight the Tree
- CPU底层|【CPU底层那些事(数组和指针真的一样吗()】)