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

获取源码请私信

相关推荐
easy_coder3 小时前
面向诊断场景的云产品知识库设计方案
人工智能·云计算
龙腾AI白云3 小时前
中国人工智能培训网
人工智能·django·知识图谱
还是叫明3 小时前
OpenCV静态图像分割(抠图)
opencv·计算机视觉·图像分割·抠图
企服AI产品测评局3 小时前
实测2026安全培训管理新范式:如何以“视觉大模型”破解AI内容生成与跨系统自动化难题?
人工智能·安全·ai·chatgpt·自动化
爱学习的徐徐3 小时前
监督学习核心算法:逻辑回归(Logistic Regression)
人工智能·机器学习·逻辑回归
刘一说3 小时前
AI热点资讯日报 | AI Daily News - 2026年5月21日 (May 21, 2026)
人工智能
张哈大3 小时前
解密Function Calling:AI Agent工具调用的标准化核心
人工智能·python·ai
搬砖的小码农_Sky3 小时前
特斯拉FSD Supervised(监督版)的技术原理
人工智能·ai·自动驾驶
cskywit4 小时前
用扩散模型“一次生成图像和标注”:CoSimGen 如何实现可控的图像-Mask 同步生成
人工智能·深度学习·计算机视觉