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

获取源码请私信

相关推荐
阿里云大数据AI技术2 小时前
阿里云 EMR AI 助手正式发布:从问答工具到全栈智能运维助手
运维·人工智能
Larcher2 小时前
从零搭建 MCP 服务——让 AI 拥有无限扩展能力
人工智能·程序员
zzzzzz3102 小时前
你的 AI 写的 React 烂透了?这个 8000+ Star 的开源工具能揪出 90% 的「Agent 屎山」
人工智能
小星AI2 小时前
MCP协议超详细教程,从入门到实战
人工智能
小星AI2 小时前
Kimi Code CLI 超详细教程,附源码
人工智能·agent
牧艺3 小时前
Cursor Rules / Skills 分层设计:让 Agent 像「团队新同事」
前端·人工智能·cursor
shepherd1113 小时前
一文带你掌握 LLM、Token、Context、Prompt、RAG、MCP、Skill、Agent 等 AI 核心概念
人工智能·后端·ai编程
小林ixn4 小时前
MCP 保姆级入门指南:AI 的“万能充电口”到底怎么玩?
人工智能
转转技术团队5 小时前
没有测试的核心代码,怎么交给 AI 重构
人工智能