52phm简介


专注于工业智能预警系统研发, 通过机理算法和数据驱动算法分析振动信号、音频、DCS、PLC信号、SCADA信号等设备运行状态数据对机器设备进行看病预诊,为机器设备健康运行保驾护航。 网站正在不断建设和完善过程中,欢迎大家给予建议和参与社区建设

联系我们


投稿说明


52phm,专注于预测性维护知识学习和交流,欢迎广大从事预测性维护行业人员投稿,投稿请联系管理员(wx: www52phmcn),投稿内容可以是:

  • 学习笔记
  • 技术理论
  • 工程案例
  • 行业资讯

加入我们


官方公众号:52phm,专注预测性维护的学习平台

2022-03-31 21:15:04    博客笔记    559    当前专栏:图像预处理    分类:算法开发    本站官网:www.52phm.cn   

公众号 ...

计算机视觉-OpenCV图像处理模块

  • @date: 2020-05-05
  • @authur: 小知同学
  • @project: OpenCV图像处理模块

前言

计算机视觉基础首先是处理图像、视频这些非结构化的数据,

而图像处理库比较常用和强大的有 PIL、OpenCV 模块,

本项目主要讲述 OpenCV 的具体用法

内容目录

主要介绍了opencv模块在图像处理方面的一些常用操作。
* 图像文件操作 * 图像基本操作 * 绘图功能 * 轨迹栏做调色板 * 图像阈值 * 图像平滑 * 边缘检测 * 轮廓检测 * 颜色空间转换及目标追踪 * 图像增强

!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
Requirement already satisfied: opencv-python in /opt/conda/lib/python3.6/site-packages
Requirement already satisfied: numpy>=1.11.3 in /opt/conda/lib/python3.6/site-packages (from opencv-python)
import cv2
import numpy as np
import pandas as pd
import warnings
import seaborn as sns
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
%matplotlib inline
Matplotlib is building the font cache using fc-list. This may take a moment.
# 定义图像路径
path = '../work/xiaozhi/CV/tx3.jpg'
path2 = '../work/xiaozhi/CV/cap.jpg'

图像文件操作

1.读取图像

"""
cv2.imread()
@params: 图片路径
@params: 读取模式
    cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
    cv.IMREAD_GRAYSCALE:以灰度模式加载图像
    cv.IMREAD_UNCHANGED:加载图像,包括alpha通道
    也可以简单表述为:1、0、-1

注意:opencv读取图片尽量不要带有中文路径,否则程序没报错,但返回结果是空的
"""
im = cv2.imread(path)
# print(im)

2.显示图像

# cv2.imshow("img", im)
plt.imshow(im)
<matplotlib.image.AxesImage at 0x7fc663ce9710>

3.保存图像

cv2.imwrite('testSave_1.jpg', im)
True

图像基本操作

1.图像属性查看

"""
im.shape 返回(行数、列数、通道数)
im.size 返回像素总值 = 行数 x 列数 x 通道数
im.dtype 返回类型
"""
print(">>>图像维度:", im.shape)
print(">>>图像像素总数:", im.size)
print(">>>图像数据类型:", im.dtype)
>>>图像维度: (200, 200, 3)
>>>图像像素总数: 120000
>>>图像数据类型: uint8

2.截取ROI(感兴趣)区域

roi_img = im[16:180, 30:158]
plt.imshow(roi_img)
<matplotlib.image.AxesImage at 0x7fc6637bc400>

3.通道分割合并及像素直方图分析

3.1.分割与合并

# 一般都是rgb,opencv默认是bgr
# 分割
b, g, r = cv2.split(im)
b, g, r
(array([[255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        ...,
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255]], dtype=uint8),
 array([[255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        ...,
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255]], dtype=uint8),
 array([[255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        ...,
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255],
        [255, 255, 255, ..., 255, 255, 255]], dtype=uint8))
# 合并
im = cv2.merge((b, g, r))
im
array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       ...,

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=uint8)

3.2.像素直方图分析

像素直方图分析可以观察像素分布情况,对观察与去除噪声有很大帮助。

bb = b.flatten()  # 二维展平为一维
gg = g.reshape(1, -1)  # 二维展平为一维
rr = g.reshape(1, -1)  # 二维展平为一维
imim = im.flatten()
# 单一通道直方图统计
plt.figure(figsize=(12, 5))
plt.subplot(1,3,1)
plt.title("b passageway")
sns.distplot(bb)

plt.subplot(1,3,2)
plt.title("g passageway")
sns.distplot(gg)

plt.subplot(1,3,3)
plt.title("r passageway")
sns.distplot(rr)
<matplotlib.axes._subplots.AxesSubplot at 0x7fc663723470>

# 三个通道直方图统计
plt.title("bgr passageway")
sns.distplot(imim)
<matplotlib.axes._subplots.AxesSubplot at 0x7fc663587550>

绘图功能

1.画线

"""
cv2.line()画线
@params1: im 图像
@params2: 线的起始坐标 (0,10)
@params3: 线的终点坐标 (30,40)
@params4: 线的颜色(R,G,B)
@params5: 线的厚度
"""
imline = cv2.line(im, (0,10), (30,40), (255,0,0), 2)
plt.imshow(imline)
<matplotlib.image.AxesImage at 0x7fc66347be48>

2.画矩形

"""
cv2.rectangle()画矩形
@params1: im 图像
@params2: 左上角坐标 (30,16)
@params3: 右下角坐标 (160,190)
@params4: 线的颜色(R,G,B)
@params5: 线的厚度
"""
imline = cv2.rectangle(im, (30,16), (160,190), (255,0,0), 2)
plt.imshow(imline)
<matplotlib.image.AxesImage at 0x7fc663464208>

3.画圆圈

"""
cv2.circle()画圆圈
@params1: im 图像
@params2: 圆的中心坐标 (100,100)
@params3: 圆的半径 80
@params4: 线的颜色(R,G,B)
@params5: 线的厚度 -1(实心)
"""
imcircle = cv2.circle(im, (100,100), 80, (0,0,200), 3)
plt.imshow(imline)
<matplotlib.image.AxesImage at 0x7fc6633c3320>

4.在图像中添加文本

"""
cv2.putText()在图片上写文本内容
@params1: im 图像
@params2: 文本内容
@params3: 文本内容的起始坐标
@params4: 字体
@params5: 字体大小
@params6: 字体颜色
@params7: 字体厚度
@params8: 字体的线型
"""
font = cv2.FONT_HERSHEY_SIMPLEX
imputText = cv2.putText(im, 'Hello', (0,170), font, 1, (0,200,255), 2, cv2.LINE_AA)
plt.imshow(imputText)
<matplotlib.image.AxesImage at 0x7fc66339e6a0>

轨迹栏作为调色板

"""
您有一个显示颜色的窗口,以及三个用于指定B、G、R颜色的跟踪栏。
滑动轨迹栏,并相应地更改窗口颜色。默认情况下,初始颜色将设置为黑色。

cv2.createTrackbar()创建轨迹栏
@params1: 轨迹栏名称;
@params2: 窗口名称;
@params3: 调色板起始值或默认值0;
@params4: 调色板最大值;
@params5: 执行回调函数每次跟踪栏值的更改。

cv2.getTrackbarPos()移动调节轨迹栏
@params1: 轨迹栏名称;
@params2: 窗口名称;

"""
# import numpy as np
# import cv2 as cv
# def nothing(x):
#     pass
# # 创建一个黑色的图像,一个窗口
# img = np.zeros((300,512,3), np.uint8)
# cv.namedWindow('image')
# # 创建颜色变化的轨迹栏
# cv.createTrackbar('R','image',0,255,nothing)
# cv.createTrackbar('G','image',0,255,nothing)
# cv.createTrackbar('B','image',0,255,nothing)
# # 为 ON/OFF 功能创建开关
# switch = '0 : OFF \n1 : ON'
# cv.createTrackbar(switch, 'image',0,1,nothing)
# while(1):
#     cv.imshow('image',img)
#     k = cv.waitKey(1) & 0xFF
#     if k == 27:
#         break
#     # 得到四条轨迹的当前位置
#     r = cv.getTrackbarPos('R','image')
#     g = cv.getTrackbarPos('G','image')
#     b = cv.getTrackbarPos('B','image')
#     s = cv.getTrackbarPos(switch,'image')
#     if s == 0:
#         img[:] = 0
#     else:
#         img[:] = [b,g,r]
# cv.destroyAllWindows()
'\n您有一个显示颜色的窗口,以及三个用于指定B、G、R颜色的跟踪栏。\n滑动轨迹栏,并相应地更改窗口颜色。默认情况下,初始颜色将设置为黑色。\n\ncv2.createTrackbar()创建轨迹栏\n@params1: 轨迹栏名称;\n@params2: 窗口名称;\n@params3: 调色板起始值或默认值0;\n@params4: 调色板最大值;\n@params5: 执行回调函数每次跟踪栏值的更改。\n\ncv2.getTrackbarPos()移动调节轨迹栏\n@params1: 轨迹栏名称;\n@params2: 窗口名称;\n\n'

图像阈值

学习两个函数:cv.threshold()、cv.adaptiveThreshold()

"""
cv2.threshold()图像阈值
@params1:原图像;
@params2:阈值,用于二值化分类;
@params3:分配大于阈值的像素点的最大值;
@params4:阈值类型。
"""
img = cv2.imread(path)
ret, threshold1 = cv2.threshold(img, 100, 205, cv2.THRESH_BINARY)
ret, threshold2 = cv2.threshold(img, 100, 205, cv2.THRESH_BINARY_INV)
ret, threshold3 = cv2.threshold(img, 100, 205, cv2.THRESH_TRUNC)
ret, threshold4 = cv2.threshold(img, 100, 205, cv2.THRESH_TOZERO)
ret, threshold5 = cv2.threshold(img, 100, 205, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
imgs = [img, threshold1, threshold2, threshold3, threshold4, threshold5]

for i in range(6):
    plt.subplot(2,3,i1)
    plt.imshow(imgs[i], cmap='gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

图像平滑

1.2D卷积过滤

"""
cv2.filter2D(im, -1, (1, 1))
@params1:原始图像
@params2:-1
@params3:卷积内核大小
"""
conv2d_1 = cv2.filter2D(im, -1, (1, 1))

kernel = np.ones((5, 5)) / 25
conv2d_2 = cv2.filter2D(im, -1, kernel)

plt.clf()
plt.figure(figsize=(12, 5))
plt.subplot(1,3,1)
plt.title("origin")
plt.imshow(im)

plt.subplot(1,3,2)
plt.title("conv2d_1")
plt.imshow(conv2d_1)

plt.subplot(1,3,3)
plt.title("conv2d_2")
plt.imshow(conv2d_2)
<matplotlib.image.AxesImage at 0x7fc663158278>




<Figure size 432x288 with 0 Axes>

2.图像模糊

"""
cv2.blur(im, (3,3))  将图像与归一化滤镜进行卷积完成滤波
cv2.GaussianBlur(im, (5, 5), 0)  高斯滤波,0 是指根据窗口大小来计算高斯函数标准差
median = cv2.medianBlur(im, 5)  中位滤波
bf = cv2.bilateralFilter(im, 9, 75, 75)  双边滤波
"""
blur = cv2.blur(im, (3,3))  # 平均
gaussian = cv2.GaussianBlur(im, (5, 5), 0)
median = cv2.medianBlur(im, 5)
bf = cv2.bilateralFilter(im, 9, 75, 75)

plt.clf()
plt.figure(figsize=(12, 5))
plt.subplot(1,4,1)
plt.title("blur")
plt.imshow(blur)

plt.subplot(1,4,2)
plt.title("GaussianBlur")
plt.imshow(gaussian)

plt.subplot(1,4,3)
plt.title("medianBlur")
plt.imshow(median)

plt.subplot(1,4,4)
plt.title("bilateralFilter")
plt.imshow(bf)
<matplotlib.image.AxesImage at 0x7fc662028a90>




<Figure size 432x288 with 0 Axes>

边缘检测

"""
cv2.Canny(im, 100, 200, 3)
@params1:原始图像;
@params2:最小像素值;
@params3:最大像素值;
@params4:查找图像渐变内核大小。

"""
edges = cv2.Canny(im, 100, 200, 3)
plt.imshow(edges)
<matplotlib.image.AxesImage at 0x7fc661f44b00>

轮廓检测

1.寻找及绘制轮廓

"""cv2.findContours()
    @params1: 寻找轮廓的图像;
    @params2: 表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
                cv2.RETR_EXTERNAL表示只检测外轮廓
                cv2.RETR_LIST检测的轮廓不建立等级关系
                cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
                cv2.RETR_TREE建立一个等级树结构的轮廓。
    @params3: 轮廓的近似办法
                cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
                cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
                cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

    @return: 一个是轮廓本身,还有一个是每条轮廓对应的属性

cv2.drawContours(img,contours,-1,(0,255,0),3)
    @params1: 源图像;
    @params2: 该作为Python列表传递的轮廓;
    @params3: 轮廓的索引(在绘制单个轮廓时有用。要绘制所有轮廓,请传递-1);
    @params4: 其余参数是颜色;
    @params5: 厚度。

寻找轮廓的步骤:
    1. 原始图像;
    2. 图像灰度化;
    3. 图像二值化阈值处理;
    4. 寻找轮廓;
    5. 绘制轮廓。
"""
im = cv2.imread(path)

plt.clf()
plt.figure(figsize=(12, 5))

# 1.原始图像处理
# 为了 plt 显示正常原始图像,将 opencv 默认的 bgr 转换成 plt 支持的 rgb
im_rgb = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
plt.subplot(141)
plt.title("origin")
plt.imshow(im_rgb, cmap='gray')

# 2.图像灰度化处理
im_gray = cv2.cvtColor(im_rgb, cv2.COLOR_BGR2GRAY)
plt.subplot(142)
plt.title("gray")
plt.imshow(im_gray, cmap='gray')

# 3.二值化阈值处理
ret, im_thresh = cv2.threshold(im_gray, 150, 200, cv2.THRESH_BINARY)
plt.subplot(143)
plt.title("threshold")
plt.imshow(im_thresh, cmap='gray')

# 4.寻找轮廓
contours, hierarchy = cv2.findContours(im_thresh,  # 寻找轮廓的图像
                                       cv2.RETR_TREE,  # 检索模式
                                       cv2.CHAIN_APPROX_SIMPLE)  # 轮廓的近似办法
print(">>>大大小小的轮廓数量:", len(contours))

# 5.绘制轮廓
cv2.drawContours(im_rgb,  # 源图像
                 contours,  # 该作为Python列表传递的轮廓
                 -1,  # 轮廓的索引,-1代表绘制所有
                 (255,0,0),  # 颜色
                 5)  # 厚度
plt.subplot(144)
plt.title("findContours")
plt.imshow(im_rgb)
>>>大大小小的轮廓数量: 34





<matplotlib.image.AxesImage at 0x7fc663259908>




<Figure size 432x288 with 0 Axes>

2.轮廓处理

cnt = contours[9]
# 特征矩
m = cv2.moments(cnt)
print(">>>特征矩", m)

# 边界矩形框
# (x,y)矩形左上角点坐标,w、h矩形宽度和高度
x, y, w, h = cv2.boundingRect(cnt)
print(">>>边界矩形框", x, y, w, h)

# 轮廓面积
# 可以在不同应用场景,去除轮廓面积太小的轮廓
for i, cnt in enumerate(contours):
    area = cv2.contourArea(cnt)
    print(">>>轮廓 %d 的面积:%.2f" % (i1, area))
>>>特征矩 {'m00': 2.0, 'm10': 306.0, 'm01': 250.0, 'm20': 46818.33333333333, 'm11': 38250.0, 'm02': 31250.333333333332, 'm30': 7163307.0, 'm21': 5852291.666666667, 'm12': 4781301.0, 'm03': 3906375.0, 'mu20': 0.3333333333284827, 'mu11': 0.0, 'mu02': 0.3333333333321207, 'mu30': 1.862645149230957e-09, 'mu21': 9.167706593871117e-10, 'mu12': 1.8553691916167736e-10, 'mu03': 4.656612873077393e-10, 'nu20': 0.08333333333212067, 'nu11': 0.0, 'nu02': 0.08333333333303017, 'nu30': 3.2927225399135965e-10, 'nu21': 1.6206368751137233e-10, 'nu12': 3.279860342492059e-11, 'nu03': 8.231806349783991e-11}
>>>边界矩形框 152 124 3 3
>>>轮廓 1 的面积:39601.00
>>>轮廓 2 的面积:8.00
>>>轮廓 3 的面积:4.00
>>>轮廓 4 的面积:2.00
>>>轮廓 5 的面积:2.00
>>>轮廓 6 的面积:2.00
>>>轮廓 7 的面积:7.00
>>>轮廓 8 的面积:4.00
>>>轮廓 9 的面积:4.00
>>>轮廓 10 的面积:2.00
>>>轮廓 11 的面积:4.00
>>>轮廓 12 的面积:8.00
>>>轮廓 13 的面积:4.00
>>>轮廓 14 的面积:28.50
>>>轮廓 15 的面积:4.00
>>>轮廓 16 的面积:2.00
>>>轮廓 17 的面积:4.00
>>>轮廓 18 的面积:41.50
>>>轮廓 19 的面积:29.00
>>>轮廓 20 的面积:7.00
>>>轮廓 21 的面积:2.00
>>>轮廓 22 的面积:2.00
>>>轮廓 23 的面积:4.00
>>>轮廓 24 的面积:15.00
>>>轮廓 25 的面积:45.00
>>>轮廓 26 的面积:2.00
>>>轮廓 27 的面积:10.00
>>>轮廓 28 的面积:11234.00
>>>轮廓 29 的面积:0.00
>>>轮廓 30 的面积:0.00
>>>轮廓 31 的面积:0.00
>>>轮廓 32 的面积:0.00
>>>轮廓 33 的面积:1.50
>>>轮廓 34 的面积:259.50

颜色空间转换

1.颜色转换基础

cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
@params1: 原图像
@params2: 图像转换参数

im = cv2.imread(path)

plt.clf()
plt.figure(figsize=(12, 5))

# 1.原始图像处理
# 为了 plt 显示正常原始图像,将 opencv 默认的 bgr 转换成 plt 支持的 rgb
im_rgb = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
plt.subplot(151)
plt.title("origin")
plt.imshow(im_rgb, cmap='gray')

# 2.bgr 转换到 hsv 颜色空间
im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
plt.subplot(152)
plt.title("im_hsv")
plt.imshow(im_hsv, cmap='gray')

# hsv 通道分割
h, s, v = cv2.split(im_hsv)
plt.subplot(153)
plt.title("h passageway")
plt.imshow(h, cmap='gray')

plt.subplot(154)
plt.title("s passageway")
plt.imshow(s, cmap='gray')

plt.subplot(155)
plt.title("s passageway")
plt.imshow(s, cmap='gray')
<matplotlib.image.AxesImage at 0x7fc661e5f470>




<Figure size 432x288 with 0 Axes>

2.应用:对象追踪及检测

橙色瓶盖追踪记检测,详见后期单独例子。

图像增强

图像增强主要作用:
* 提高图像质量,比如光照亮度、各种滤镜; * 扩展图像数据量,通过不同角度旋转、截取等来生成新的图像数据; * .....

参考资料

[1] OpenCV中文官方文档
[2] HSV颜色空间介绍,https://www.cnblogs.com/wangyblzu/p/5710715.html

免责声明


[推荐] python模块import导入

2022-01-17 23:59:41    博客笔记    1256    分类:算法开发    专栏:python基础   


[推荐] PIL图像预处理实操

2022-03-10 16:18:19    博客笔记    828    分类:算法开发    专栏:图像预处理   


[推荐] 计算机视觉-OpenCV视频处理

2022-03-31 21:39:22    博客笔记    506    分类:算法开发    专栏:图像预处理   



转发此文章到社区


关注公众号进群

让志同道合读者学习交流



python机器学习与特征工程理论与代码实现

通过python编程语言实现特征工程功能,本篇特征工程文章较为全面的介绍数据预处理,缺失值处理方法、异常值处理方法、数据无量纲、标准化、归一化,另外还介绍特征选择、特征降维等特征工程知识

2021-12-04 12:12:30    博客笔记    4525    分类:算法开发    专栏:特征工程   


异常检测模型整理

写在前面文中使用了其他博主的图,具体链接已不好追踪,如果不妥,还请谅解(私信我加备注哦)~异常检测主要检测数据中的离群点,异常数据的特征值与正常数据的特征值距离较远。异常检测具有以下难点:标签数据较少,从较少的标签数据中很难学习到哪些是正常数据,哪些是异常数据。难以划分异常和正常的边界。数据本身存在噪声,导致噪声和异常难以区分。处理异常检测的模型包括监督模型、半监督学习和无监督学习模型,具体如下:一、监督模型常见分类模型都可使用。若有标签数据,则优先使用有监督学习方法解决问题。在基于监

2021-12-13 23:52:54    互联网    1506    分类:算法开发    专栏:工业异常检测   


异常分析介绍-《Outlier Analysis 2nd Edition》

异常值是与其余数据存在显然不同的数据点。 霍金斯定义异常值如下: <br> “异常值是一个与其他观察结果有很大差异的观察结果,以此引起人们怀疑它是由不同的机制产生的”。 <br> 在数据挖掘和统计学文献中,异常值也被称为abnormalities、discordants、deviants或anomalies。 在大多数应用中,数据是由一个或多个生成过程创建的,这些生成过程既可以反映系统中的活动,也可以反映收集的有关实体的观察结果。当生成过程表现异常时,会导致创建异常值。 因此,异常经常包含有关系统和实体影响数据生成过程的异常特征的有用信息。 对这些不寻常的特性的认识提供了有用的应用特定见解。 一些例子如下:

2021-12-21 11:00:12    互联网    424    分类:算法开发    专栏:工业异常检测   


异常分析-数据模型就是一切《Outlier Analysis 2nd Edition》

几乎所有异常值检测算法都会建立数据中正常模式的模型,然后根据这些模式的偏差计算给定数据点的异常值。 例如,该数据模型可以是生成模型,例如高斯混合模型,基于回归的模型或基于邻近的模型。 所有这些模型对数据的“正常”行为做出不同的假设。 然后通过评估数据点与模型之间的拟合质量来计算数据点的离群值分数。 在很多情况下,模型可能是算法定义的。 例如,基于最近邻的离群值检测算法根据其最近邻距离的分布对数据点

2021-12-21 11:00:33    互联网    401    分类:算法开发    专栏:工业异常检测   


语音信号的预处理

概述语音信号是一种非平稳的时变信号,它携带着大量信息。在语音编码、语音合成、语音识别和语音增强等语音处理中,都需要提取语音中包含的各种信息语音处理的目的对语音信号进行分析,提取特征参数,用于后续处理加工语音信息,如语音增强和语音合成中的应用根据所分析的参数类型,语音信号可以分成:时域分析最简单、最直观直接对语音信号的时域波形进行分析特征参数:语音的短时能力、平均幅度、短时...

2022-01-13 16:53:53    互联网    790    分类:算法开发    专栏:语音信号预处理   


【数字信号处理】--数字信号分析与处理基础知识

文章目录一、信号的时域分析1.1信号波形参数识别1.2检测方法 过零检测法1.3数字信号微分与数字信号积分二、信号的频域分析2.1周期信号的频谱分析2.2 信号的频谱分析2.3数字信号的频谱计算方法三、信号的时差域相关分析3.1信号的相关系数3.2 相关应用3.3 数字滤波器和模拟滤波器的区别四、信号的幅值域分析4.1概率密度曲线与概率分布曲线的应用五、信号的数字滤波5.1滤波器概念5.2频率域滤波:5.3时域滤波5.4 时域FIR滤波器5.5 IIR滤波器5.6 其他滤波器5.7 数字音乐均衡器的设计六、

2022-01-13 17:40:13    互联网    343    分类:算法开发    专栏:数字信号处理   


python第一个hello world程序

window环境下运行新建一个hello.py文件# -*- coding: utf-8 -*-print("Hello, World!")如果安装了pycharm或者其它编辑器,那么可以直接运行hello world程序

2022-01-17 22:21:56    博客笔记    486    分类:算法开发    专栏:python基础   


python使用窗函数处理频谱泄露

1. 当运用计算机实现工程测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。做法是从信号中截取一个时间片段,然后用观察的信号时间片段进行周期延拓处理,得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。无线长的信号被截断以后,其频谱发生了畸变,原来集中在f(0)处的能量被分散到两个较宽的频带中去了(这种现象称之为频谱能量泄漏)。 1. 为了减少频谱能量泄漏,可采用不同的截取函数对信号进行截断,截断函数称为窗函数,简称为窗。 1. 信号截断以后产生的能量泄漏现象是必然的,因为窗函数w(t)是一个频带无限的函数,所以即使原信号x(t)是限带宽信号,而在截断以后也必然成为无限带宽的函数,即信号在频域的能量与分布被扩展了。又从采样定理可知,无论采样频率多高,只要信号一经截断,就不可避免地引起混叠,因此信号截断必然导致一些误差。泄漏与窗函数频谱的两侧旁瓣有关,如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱,为此,在时间域中可采用不同的窗函数来截断信号。

2022-02-11 13:19:32    博客笔记    905    分类:算法开发    专栏:振动信号预处理   


tensorflow系列-深度学习中的激活函数

所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。激活函数(Activation functions)对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。它们将非线性特性引入到我们的网络中。如图1,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。引入激活函数是为了增 加神经网络模型的非线性。没有激活函数的每层都相当于矩阵相乘。就算你叠加了若干层之后,无非还是个矩阵相乘罢了。

2022-03-31 22:05:32    博客笔记    602    分类:算法开发    专栏:未分组   


齿轮故障诊断的实验数据集及python处理

该试验台在不同小齿轮条件下进行测试,并通过加速度计进行齿轮故障数据振动信号采集,加速度计采样率为10KHz、采样时长为10s,采样数据共3包,每一包数据对应着不同故障类型,分别是健康状态、齿轮断齿、齿轮磨损状态下的数据集。该数据集被授权于用于任何学术和研究目的。...

2022-08-09 16:05:36    博客笔记    542    分类:边缘感知    专栏:齿轮箱数据集   


  • 52phm公告

  • 在这里,可以学习接触到工业互联网技术知识以及落地案例,其中涵盖工业数据集、工业标准库、机理模型、设备知识、机器学习、 深度学习、特征工程、振动分析、工业视觉、边缘硬件及传感器等技术知识!


图像预处理   
  • 关于站长


  •         从事设备故障预测与健康管理行业多年的PHM算法工程师(机器医生)、国际振动分析师, 实践、研发和交付的项目涉及“化工、工业机器人、风电机组、钢铁、核电、机床、机器视觉”等领域。专注于工业智能预警系统研发, 通过机理算法和数据驱动算法分析振动信号、音频、DCS、PLC信号、SCADA信号等设备运行状态数据对机器设备进行看病预诊,为机器设备健康运行保驾护航。


当前文章目录


52phm社区

52phm社区,专注预测性维护的学习平台!

Saas体验

+ 工业demo学习系统

技术博客

+ 博客首页    + 算法开发    + 边缘感知   

+ 设备机理    + 开发环境

+ 论文速递   

友情链接

+ 在码圈

联系我

Copyright© 2021 52phm社区

京ICP备2021029973号-1