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.存在些许过检

获取源码请私信

相关推荐
Shockang5 小时前
AI 智能体安全沙盒实战
人工智能
yuhulkjv3356 小时前
Claude表格复制到word不再崩溃,AI导出鸭批量导出+格式无损一键搞定
人工智能·ai·c#·word·ai导出鸭
大明者省7 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
抱抱宝7 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
抱抱宝7 小时前
大模型应用开发教程08 | 构建完整 RAG 应用(Chroma/FAISS 实战)
人工智能·gpt·prompt·agent
美团技术团队7 小时前
KDD‘26 美团学术论文精选及KDD Cup‘26 DataAgents赛道冠军思路解读
人工智能
AKAMAI8 小时前
当AI模型超出存储增长时
人工智能·云计算
科技绘图8 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
DS随心转小程序8 小时前
ChatGPT 文字怎么转为 word?解析各类转换方案,AI 导出鸭成为高效文档转换新选择
人工智能·chatgpt·word·豆包·deepseek·ai导出鸭
乌恩大侠8 小时前
【AI-RAN】硬件产品:DELL 前传交换机
人工智能·spark·aerial·o-ru·ai-ran