Python OpenCV孤立点检测

孤立点检测

在Python中使用OpenCV进行孤立点(异常点)检测,可以通过应用统计分析或者使用OpenCV的findContours和convexHull函数来识别。以下是一个简单的例子,使用OpenCV的findContours和convexHull来识别并绘制孤立点。

孤立点的检测,是检测嵌在一幅图像的恒定区域或亮度几乎不变的区域里的孤立点。孤立点的检测以二阶导数为基础。

二阶导数的计算可以采用拉普拉斯二阶有限差分公式:

当孤立点在卷积模板中心时,拉普拉斯滤波器的响应很强烈,而孤立点在非模板中心时,拉普拉斯滤波器响应为零。当滤波器在一个点的响应超过设定阈值 T,则认为在卷积核的中心检测到了孤立点,标记为 1,而其它点都被标记为 0,从而产生一副二值图像。

在这里插入图片描述
注意:

  • (1)本节所称的孤立点检测,是绝对意义上的孤立点,即一个孤立的像素。人眼所能感知、识别的孤立点,通常来说其实是一个微小的区域,而不是孤立的一个像素,因此并不能用这种方法检测。

  • (2)使用 Laplace 算子进行图像孤立点检测,推荐使用 scipy.signal 实现卷积运算,不建议使用 cv2.filter2D 实现。后者自动将卷积结果进行归一化处理,不便于通过阈值 T 检测孤立点。

    # 11.1 图像孤立点检测 (Laplace 算子)imgGray = cv2.imread("../images/Fig1004.tif", flags=0)hImg, wImg = imgGray.shape# scipy.signal 实现卷积运算 (注意:不能用 cv2.filter2D 处理)from scipy import signalkernelLaplace = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])  # Laplacian kernelimgLaplace = signal.convolve2d(imgGray, kernelLaplace, boundary='symm', mode='same')  # same 卷积# 在原图上用半径为 5 的圆圈标记角点T = 0.9 * max(imgLaplace.max(), -imgLaplace.min())imgPoint = np.zeros((hImg, wImg), np.uint8)  # 创建黑色图像for h in range(hImg):for w in range(wImg):if (imgLaplace[h, w] > T) or (imgLaplace[h, w] < -T):imgPoint[h, w] = 255  # 二值处理cv2.circle(imgPoint, (w, h), 10, 255)print(imgLaplace.shape, imgLaplace.max(), imgLaplace.min(), T)plt.figure(figsize=(9, 6))plt.subplot(131), plt.axis('off'), plt.title("Original")plt.imshow(imgGray, cmap='gray', vmin=0, vmax=255)plt.subplot(132), plt.axis('off'), plt.title("Laplacian K2")plt.imshow(imgLaplace, cmap='gray', vmin=0, vmax=255)plt.subplot(133), plt.axis('off'), plt.title("Isolated point")plt.imshow(imgPoint, cmap='gray', vmin=0, vmax=255)plt.tight_layout()plt.show()

在这里插入图片描述

import cv2
import numpy as np# 读取图像
image = cv2.imread('isolated_points.png', 0)# 二值化图像
_, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)# 寻找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 遍历轮廓并计算凸包
for contour in contours:# 计算凸包hull = cv2.convexHull(contour)# 如果凸包的点数小于等于3,则可能是孤立点if len(hull) <= 3:# 绘制原始轮廓cv2.drawContours(image, [contour], -1, (0, 255, 0), 2)# 显示图像
cv2.imshow('Isolated Points', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们首先读取了一个包含孤立点的图像,然后将其转换为二值图像。接着,我们使用findContours函数找到所有轮廓。对于每个轮廓,我们计算其凸包,并检查凸包的点数。如果点数小于等于3,则可能是孤立点,我们将其用绿色线条绘制在原图上。最后,我们显示处理后的图像

C++

使用拉普拉斯核进行点的检测

在这里插入图片描述

#include<iostream>
#include<opencv2/opencv.hpp>using namespace cv;
using namespace std;int main()
{Mat image, image_gray, image_bw, image_bw2;   image = imread("lena孤立点.png");  //读取图像;if (image.empty()){cout << "读取错误" << endl;return -1;}//转换为灰度图像cvtColor(image, image_gray, COLOR_BGR2GRAY);cv::imshow("image_gray", image_gray);//1.构建拉普拉斯孤立点检测卷积核Mat Laplacian_kernel = (cv::Mat_<float>(3, 3) << 0, 1, 0,1, -4, 1,0, 1, 0);//2.卷积运算filter2D(image_gray, image_bw, -1, Laplacian_kernel);cv::imshow("image_bw", image_bw);//3.阈值处理threshold(image_bw, image_bw2, 250, 255, 0); //通过0,1调节二值图像背景颜色cv::imshow("image_bw2", image_bw2);cv::waitKey(0);  //暂停,保持图像显示,等待按键结束return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13412.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-15-三数之和

题解&#xff1a; 代码&#xff1a; 参考&#xff1a;leetcode-16-最接近的三数之和

PHP中小学优校管理系统小程序源码

&#x1f3eb; 中小学优校管理系统&#xff1a;打造教育新生态&#xff0c;赋能智慧校园 &#x1f3eb; &#x1f3f7;️ 开篇&#xff1a;为什么我们需要中小学优校管理系统&#xff1f; 在教育日新月异的今天&#xff0c;传统的管理模式已难以满足现代学校的需求。面对庞大…

Java poi 模板导出Word 带图片

Java poi 模板导出Word 带图片 重点&#xff01;&#xff01;&#xff01; 官方文档&#xff1a;https://deepoove.com/poi-tl/#_maven 最终效果 模板 其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。 Maven依赖 <poi.version>4.1.2</poi.version>…

【JAVA毕业设计】基于Vue和SpringBoot的微服务在线教育系统

博主说明&#xff1a;本文项目编号 T 060 &#xff0c;文末自助获取源码 \color{red}{T060&#xff0c;文末自助获取源码} T060&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

泷羽sec学习打卡-Linux基础

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于Linux的那些事儿-Base 一、Linux-Base什么时openssl&#xff1f;有哪些加密参数&#xff1f;常用lin…

【6.2】位运算-解重复的DNA序列

一、题目 所有 DNA 都 由 一 系 列 缩 写 为 A &#xff0c; C &#xff0c; G 和 T 的 核 苷 酸 组 成 &#xff0c; 例如&#xff1a;"ACGAAT TCCG"。在研究DNA时&#xff0c;识别DNA中的重复序列有时会对研究非常有 帮助。 编写一个函数来找出所有目标子串&#…

Net.Core Mvc 添加 log 日志

1: 首先在 Nuget 安装插件 2&#xff1a;添加 log 配置 在项目中新创件一个文件夹 ConfigFile 在文件家里面添加 log4net.config log4net.config 里面写入 <?xml version"1.0" encoding"utf-8"?> <configuration><log4net><!--跟…

A030-基于Spring boot的公司资产网站设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

AG32 MCU与CPLD通过AHB总线交互

MCU与CPLD可以通过AHB或APB总线进行数据交互。APB总线通常连接低速设备&#xff0c;如串口&#xff0c;而AHB总线则用于连接高速设备&#xff0c;如RAM等。由于我们需要高速采集大量数据&#xff0c;因此选择使用AHB总线与CPLD进行交互。 地址范围 在地址设计中&#xff0c;C…

【学习笔记】PT协程-未完待续

单线程编程-协程 单线程&#xff0c;所有协程都是共享栈–换句话说&#xff1a;裸机 代码结构 十分精简 lc 有两个版本 文件说明lc-addrlabels.h使用GCC扩展语法实现的协程基础lc-switch.h使用switch语句实现的协程基础lc.h用于选择GCC语法还是switch语句实现pt.h基于lc.h实…

【python系列】python内置函数print()和input()

1.前言 正式开始学习python编程基础知识&#xff0c;首先要建立正确的学习姿势&#xff0c;什么姿势呢&#xff0c;当然不是躺着。首先要学会看语法&#xff0c;学习每一个内置函数都要先把语法和语义理解&#xff0c;再结合勤于练习。有些同学可能英语不太好&#xff0c;这里…

并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串

🚀 博主介绍:大家好,我是无休居士!一枚任职于一线Top3互联网大厂的Java开发工程师! 🚀 🌟 在这里,你将找到通往Java技术大门的钥匙。作为一个爱敲代码技术人,我不仅热衷于探索一些框架源码和算法技巧奥秘,还乐于分享这些宝贵的知识和经验。 💡 无论你是刚刚踏…

字节、快手、Vidu“打野”升级,AI视频小步快跑

文&#xff5c;白 鸽 编&#xff5c;王一粟 继9月份版本更新之后&#xff0c;光锥智能从生数科技联合创始人兼CEO唐家渝朋友圈获悉&#xff0c;Vidu大模型将于本周再次进行版本升级&#xff0c;Vidu-1.5版本即将上线。 此版本更新方向仍是重点延伸大模型的泛化能力和主体…

redis实现消息队列的几种方式

一、了解 众所周知&#xff0c;redis是我们日常开发过程中使用最多的非关系型数据库&#xff0c;也是消息中间件。实际上除了常用的rabbitmq、rocketmq、kafka消息队列&#xff08;大家自己下去研究吧~模式都是通用的&#xff09;&#xff0c;我们也能使用redis实现消息队列。…

JVM(一、基础知识)

JVM虚拟机的灵魂三问 JVM是什么&#xff1f; 广义上是一种规范&#xff0c;狭义上的是JDK中的JVM虚拟机&#xff0c;虚拟机模拟计算机的组成部分&#xff0c;可以运行我们写的应用程序&#xff0c;是对操作系统的一层抽象&#xff0c;把我们的应用程序和操作系统解耦&#xff0…

问题分析与解决:Android开机卡动画问题分析

1. 问题背景及描述 在一个android设备的开发的项目中遇到了一个比较典型的问题:在主板贴片完成后,首次刷入androdi固件验证时,遇到了按键出发开机后,系统启动到android动画界阶段时一直循环卡在此阶段,无法进入桌面。如下如所示: 此问题在许多android项目的首次点亮阶段均…

视频会议接入GB28181视频指挥调度,语音对讲方案

传统的视频会议指挥调度系统目前主流的互联网会议大部分都是私有协议&#xff0c;功能都很独立。目前主流的视频监控国标都最GB平台&#xff0c;新的需求要求融合平台要接入监控等设备&#xff0c;并能实现观看监控接入会议&#xff0c;实时语音设备指挥现场工作人员办公实施。…

跟着尚硅谷学vue2—进阶版1.0—组件化编程

2. Vue 组件化编程 1. 传统方式和使用组件方式编写的对比 1. 传统方式编写应用 2. 使用组件方式编写应用 2. 模块与组件、模块化与组件化 1. 模块 理解: 向外提供特定功能的 js 程序, 一般就是一个 js 文件为什么: js 文件很多很复杂作用: 复用 js, 简化 js 的编写, 提高 j…

WebRTC视频 01 - 视频采集整体架构

一、前言&#xff1a; 我们从1对1通信说起&#xff0c;假如有一天&#xff0c;你和你情敌使用X信进行1v1通信&#xff0c;想象一下画面是不是一个大画面中有一个小画面&#xff1f;这在布局中就叫做PIP&#xff08;picture in picture&#xff09;&#xff1b;这个随手一点&am…

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …