opencv 微小缺陷 频域实战

一、检测背景

halcon中有例程针对微小不明显缺陷的检测

思路:

1.将图片转为频域图;

2.构造高斯滤波器,设计带宽滤波,去除高频噪点和低频模糊

3.针对滤波后的时域图进行局部增强

4.挑选合适的阈值对缺陷进行提取,辅助一些形态学操作

二、代码实现(demo)

cpp 复制代码
enum class FrequencyFilterType
{
	IDEAL_LOW_PASS = 1,      // 1-理想低通
	IDEAL_HIGH_PASS = 2,     // 2-理想高通
	GAUSSIAN_LOW_PASS = 3,   // 3-高斯低通
	GAUSSIAN_HIGH_PASS = 4,  // 4-高斯高通
	BUTTERWORTH_LOW_PASS = 5,// 5-巴特沃斯低通
	BUTTERWORTH_HIGH_PASS = 6,// 6-巴特沃斯高通
	BAND_PASS = 7,            // 7-带通(允许低截止和高截止内的频率通过)
	BAND_STOP = 8             //8-带阻
};
void main()
{
	try {
		std::vector<cv::String> strs;
		
		glob("youPath\\plastics\\plastics_*.png", strs);
		for (String str : strs)
		{
			Mat src = imread(str, -1);
			Mat gray;
			cvtColor(src, gray, COLOR_BGR2GRAY);
			GaussianBlur(gray, gray, Size(3, 3), 1);
			Mat filter, filter2, filter3;
			fft_Filter(gray, filter, FrequencyFilterType::BAND_PASS, 6, 20, 0);
			Mat result = gray_range_rect(filter, 9);
			/*cv::Mat kernel = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(13, 13));
			cv::morphologyEx(result, result, cv::MORPH_CLOSE, kernel);*/
			double Min, Max;
			cv::minMaxLoc(result, &Min, &Max);
			double thresh =  Max * 0.9;
			cv::Mat binary;
			cv::threshold(result, binary, thresh, 255, cv::THRESH_BINARY);

			Mat kernel = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(13, 13));
			cv::Mat closing;
			cv::morphologyEx(binary, closing, cv::MORPH_CLOSE, kernel);
			std::vector<std::vector<cv::Point>> contours;
			cv::findContours(closing, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
			for (int cnt = 0; cnt < contours.size(); cnt++) {
				Rect rect = boundingRect(contours[cnt]);
				if (rect.area() >= 4 ) {
					Moments moment = moments(contours[cnt]);
					Point center;
					center.x = moment.m10 / moment.m00;
					center.y = moment.m01 / moment.m00;

					circle(src, center, 20, Scalar(0, 0, 255), 3);
					//drawContours(src, contours, cnt, Scalar(0, 0, 255));
				}
			}
		}
		
	}
	catch (std::exception& ex) {
		std::cout << ex.what();
	}
	

}

检测效果如下:

三、代码分析

1.opencv实现多种频域滤波操作

2.将halcon的gray_range_rect使用opencv的形态学操作替换

3.存在些许过检

获取源码请私信

相关推荐
D202020201 小时前
TikTok Shop禁止AI语音直播落地后,跨境卖家如何通过达秘合规调整带货内容
人工智能
像风一样自由20201 小时前
20.Milvus常见问题检索不到维度错误和数据一致性
人工智能·大模型·milvus
现代野蛮人2 小时前
【深度学习实验】—— 基于 LSTM 与 Optuna 调参的丙型肝炎预测
人工智能·深度学习·lstm
支支დ2 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
ZGIAI2 小时前
ZGI 让那些"等你去处理"的事,真正跑起来
人工智能·架构
ZGIAI2 小时前
ZGI:别再做Agent Demo了,先问问它在业务里能不能撑过下周三
人工智能·架构
香芋芋圆2 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
m0_614523552 小时前
完整教程|输入一句描述,能不能直接生成一段可以继续剪辑的视频:写结构化描述到生成短样片
人工智能·音视频
stormzhangV3 小时前
AGI 时代终于来了!
人工智能·openai
清风百草3 小时前
【05】AI辅助文档管理:开发者的效率革命
人工智能·ai辅助文档管理·开发者的效率革命