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

获取源码请私信

相关推荐
水如烟11 小时前
孤能子视角:梁文锋的场,一个量化交易者的本能
人工智能
计育韬11 小时前
KimiK3一条龙从建模到3D打印,实现复旦大学老校门手办制作(榫卯结构拆件
人工智能
qq_4542450311 小时前
ClineRule系统提示词
人工智能·架构
研☆香11 小时前
怎样利用AI工具,搭配制作网页
人工智能
ARM|X86+FPGA工业主板厂家12 小时前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统
imbackneverdie12 小时前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校
橙臣程12 小时前
深度学习3——数据集概述
人工智能·深度学习
墨舟的AI笔记12 小时前
权威服务器下的反作弊:从输入校验到状态可重放审计
人工智能
JoyCong199812 小时前
手机变身“司令台”!ToDesk AI安卓版上线
网络·人工智能·科技·智能手机·电脑·远程工作·远程操作
大模型码小白12 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring