52phm简介


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

联系我们


投稿说明


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

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

加入我们


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

2022-03-10 16:18:19    博客笔记    829    当前专栏:图像预处理    分类:算法开发    本站官网:www.52phm.cn   

公众号 ...

PIL图像预处理实操

  • 日期:2019.06.20
  • 作者:小知
  • 课题:图像预处理

前言

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

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

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

目录情况

  • PIL基本操作
  • 图像处理
    • 1 图像大小
    • 2 图像旋转
    • 3 图像通道
    • 4 图像添加水印
    • 5 图像增强
    • 6 图像滤镜
    • 7 图像直方图
    • 8 图像通道运算
  • 图像向量化
    • 1 图像转换成数组
    • 2 数组转换成图像
    • 3 图像处理成三维数组
    • 4 图像处理成二维数组
  • 图像识别分类实战
  • 参考文献

介绍作用

1 PIL基本操作:主要是为了介绍 PIL 打开、展示和保存图像的基本运用。

2 图像处理:这个主要是为了对原始图像进行再处理,从而使图像符合我们的需求,
通常这里的处理情况会影响到模型训练的精度和准。

3 图像向量化:由于图片是非结构化数据,计算机不能直接识别处理,
因此需要向量化处理,从而转换成结构化数据

4 图像识别分类实战:主要是以步骤性来讲述,方便掌握

PIL 基本操作

# 定义图像路径
path = '../work/xiaozhi/tx3.jpg'
    time: 624 µs
from PIL import Image
import matplotlib.pyplot as plt

im = Image.open(path)

# 1 打印图像信息
# Image 类的属性
print('>>>图像像素大小:', im.size)
print('>>>图像的模式:', im.mode)
print('>>>源文件的文件格式:', im.format)
print('>>>颜色调色板样式:', im.palette)
print('>>>存储图像相关数据的字典:', im.info)

# 2 保存图像
# im.save(filename,format)
# im.save('../img/save_crawl.png', 'png')
im.save('../work/xiaozhi/save_tx3.png')
    >>>图像像素大小: (200, 200)
    >>>图像的模式: RGB
    >>>源文件的文件格式: JPEG
    >>>颜色调色板样式: None
    >>>存储图像相关数据的字典: {'jfif': 257, 'jfif_version': (1, 1), 'dpi': (300, 300), 'jfif_unit': 1, 'jfif_density': (300, 300)}
    time: 12.5 ms
# 3 显示图像
# 3.1 直接显示
# im.show()
# 在 notebook 或者 shell 环境直接 im 即可显示
im

    time: 10.7 ms
# 3.2 结合 Plt 显示
plt.figure(num=1, figsize=(8,5),)
plt.title('The image title')
# plt.axis('off') # 不显示坐标轴
plt.imshow(im)
plt.show()

    time: 202 ms

图像处理

图像处理这一块很重要,是以后做图像分类、图像识别等比较重要的图像预处理环节

1 图像大小


1-1 缩放大小

im.resize(size, resample)
im.thumbnail(size,resample)(创建缩略图)
保留图片的所有部分,只是缩小或者扩大比例而已


  • resize 方法可以将原始的图像转换大小,size 是转换之后的大小

resample 是重新采样使用的方法,有以下四种方法,默认 Image.NEAREST Image.BICUBIC,Image.LANCZOS,Image.BILINEAR,Image.NEAREST

  • NEAREST:最近滤波。从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。
  • BILINEAR:双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。
  • BICUBIC:双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。
  • ANTIALIAS:平滑滤波。这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波, 以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。
  • 注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时唯一正确的滤波器。 BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。
from PIL import Image

# 设置画布大小
plt.figure(figsize=(10,8))

# original
im = Image.open(path)
print('原图像像素大小:', im.size)
plt.subplot(131);plt.title('original')
plt.imshow(im)

# resize()——>返回新的 image 对象
im_resize = im.resize((100, 100), resample=Image.LANCZOS)
print('im_resize 转换后像素大小:', im_resize.size)
plt.subplot(132);plt.title('im.resize')
plt.imshow(im_resize)

# thumbnail()——>直接覆盖原始的 im
im_thumbnail = im.thumbnail((50, 50), resample=Image.LANCZOS)
print(im_thumbnail)
plt.subplot(133);plt.title('im_thumbnail')
plt.imshow(im)
# plt.axis('off') # 不显示坐标轴
plt.show()
    原图像像素大小: (200, 200)
    im_resize 转换后像素大小: (100, 100)
    None

    time: 427 ms

1-2 裁剪大小

im.crop(box)
截取图片,图片部分信息丢失

从当前的图像中返回一个矩形区域的拷贝。
变量box是一个四元组,定义了左、上、右和下的像素坐标。
请注意:box 中距离设置是以 左上角x轴与左上角y轴,即(0, 0)为基准来计算的

from PIL import Image

im = Image.open(path)
box=(35, 20, 160, 193)  # 注意理解这里的设置
im_crop = im.crop(box)

# 显示
plt.figure(figsize=(7,4))  # 设置画布大小
plt.subplot(121);plt.title('original')
plt.imshow(im)
plt.subplot(122);plt.title('im_crop')
plt.imshow(im_crop)
# plt.axis('off') # 不显示坐标轴
plt.show()

    time: 308 ms

2 图像旋转

transpose()和rotate()没有性能差别

  • rotate()

    • rotate(45) 顺时针 45 度
    • rotate(-45) 逆时针 45 度
  • transpose(method)(图像翻转或者旋转),method 参数如下

    • Image.FLIP_LEFT_RIGHT,表示将图像左右翻转
    • Image.FLIP_TOP_BOTTOM,表示将图像上下翻转
    • Image.ROTATE_90,表示将图像逆时针旋转90°
    • Image.ROTATE_180,表示将图像逆时针旋转180°
    • Image.ROTATE_270,表示将图像逆时针旋转270°
    • Image.TRANSPOSE,表示将图像进行转置(相当于顺时针旋转90°)
    • Image.TRANSVERSE,表示将图像进行转置,再水平翻转
%%time
from PIL import Image

# 设置画布大小
plt.figure(figsize=(10, 5))

im = Image.open(path)
plt.subplot(131);plt.title('original')
plt.imshow(im)

# rotate()
im_rotate = im.rotate(-45) # 顺时针角度表示
plt.subplot(132);plt.title('im_rotate')
plt.imshow(im_rotate)

# transpose()
im_transpose = im.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
plt.subplot(133);plt.title('im_transpose')
plt.imshow(im_transpose)
# plt.axis('off') # 不显示坐标轴
plt.show()

    CPU times: user 472 ms, sys: 8 ms, total: 480 ms
    Wall time: 476 ms
    time: 478 ms

3 图像通道

3-1 颜色通道

im.convert(mode)⇒ image
将当前图像转换为其他模式,并且返回新的图像
mode 的取值可以是如下几种:

    1     1位像素,黑和白,存成8位的像素
    L   8位像素,黑白(灰度图),只有一个颜色通道
    P   8位像素,使用调色板映射到任何其他模式
    RGB 3× 8位像素,真彩
    RGBA    4×8位像素,真彩透明通道
    CMYK    4×8位像素,颜色隔离
    YCbCr   3×8位像素,彩色视频格式
    I   32位整型像素
    F   32位浮点型像素
%%time
from PIL import Image

# 设置画布大小
plt.figure(figsize=(10, 5))

im = Image.open(path)
print('原始图像模式:', im.mode)
plt.subplot(131);plt.title('original')
plt.imshow(im)

# convert(mode)
im_gray = im.convert('L')  # 加载为灰度图
print('im_convert 图像模式:', im_gray.mode)
plt.subplot(132);plt.title('im_gray')
plt.imshow(im_gray)
# plt.axis('off') # 不显示坐标轴
plt.show()
    原始图像模式: RGB
    im_convert 图像模式: L

    CPU times: user 312 ms, sys: 0 ns, total: 312 ms
    Wall time: 303 ms
    time: 304 ms

如果转换后的图像显示异常

如:AttributeError: 'numpy.ndarray' object has no attribute 'mask'

解决方法很有可能是版本问题,要更新 matplotlib,如:$ pip install -U matplotlib

3-2 通道分离与合并

  • split()(颜色通道分离)
    • r,g,b=img.split() #分离三通道
  • merge(mode,channels)(颜色通道合并)
    • pic=Image.merge('RGB',(r,g,b)) #合并三通道
r,g,b = im.split()   # 分离三通道
merge = Image.merge('RGB',(r,g,b)) # 合并三通道
merge

    time: 11.6 ms

4 图像添加水印

4-1 在图片上面加文字

# 提示:这段代码在科赛里不能运行,
# 可以在自己本地的 notebook 运行
# from PIL import Image, ImageDraw, ImageFont

# im = Image.open(path)

# draw = ImageDraw.Draw(im)  # 新建绘图对象
# width, height = im.size  # 获取图像的宽和高
# setFont = ImageFont.truetype('C:/windows/fonts/Dengl.ttf', 20) # ImageFont模块
# draw.text(xy=(width - 140, height - 25),  # 文字位置
#           text=u'吻我别说话hhh',  # 文字
#           font=setFont,  # 字体样式和大小
#           fill="blue"  # 设置文字颜色
#          )
# im
    time: 399 µs

4-2 添加文字水印

Signature: Image.alpha_composite(im1, im2)
im1, im2 必须为 RGBA 模式
Docstring:
Alpha composite im2 over im1.

:param im1: The first image. Must have mode RGBA.
:param im2: The second image. Must have mode RGBA, and the same size as
the first image.

# 提示:这段代码在科赛里不能运行,
# 可以在自己本地的 notebook 运行
# from PIL import Image, ImageDraw,ImageFont

# im = Image.open(path).convert('RGBA')
# # 新建图像
# txt = Image.new('RGBA', im.size, (0,0,0,0))
# # 添加文字
# fnt = ImageFont.truetype('C:/windows/fonts/Dengl.ttf', 20)
# d = ImageDraw.Draw(txt)
# d.text(xy=(txt.size[0]-80,txt.size[1]-30), 
#       text=u"小知同学", 
#       font=fnt, 
#       fill='blue'
#       )
# # 合并图像
# im = Image.alpha_composite(im, txt)
# im
    time: 553 µs

4-3 添加图片水印

这里只是一个小演示,可以准备其他图片水印再添加,效果会更好呢

from PIL import Image

im = Image.open(path)
watermark = Image.open(path)

layer = Image.new('RGBA', im.size, (0,0,0,0))
layer.paste(watermark, (im.size[0]-150,im.size[1]-60))
im = Image.composite(layer,im,layer)
im

    time: 15.8 ms

5 图像增强

enhanceImg = ImageEnhance.Contrast(im)

enhanceImg.enhance(2.0).show()
2.0表示增强两倍,1.0表示不增强

from PIL import Image, ImageEnhance   
import matplotlib.pyplot as plt
# 设置画布大小
plt.figure(figsize=(10, 8))

# --------------------------------------
# 原始图像
im = Image.open(path)
plt.subplot(231);plt.title('original')
plt.imshow(im)

# ----------图像增强-----------------------
# 增强亮度
# 调整图片的明暗平衡
ie_Brightness = ImageEnhance.Brightness(im)
plt.subplot(232);plt.title('ie_Brightness')
plt.imshow(ie_Brightness.enhance(2.0))
plt.axis('off')  # 关掉坐标轴

# 图片尖锐化
# 锐化/钝化图片
ie_Sharpness = ImageEnhance.Sharpness(im) 
plt.subplot(233);plt.title('ie_Sharpness')
plt.imshow(ie_Sharpness.enhance(2.0))

# 对比度增强
# 调整图片的对比度
ie_Contrast = ImageEnhance.Contrast(im) 
plt.subplot(234);plt.title('ie_Contrast')
plt.imshow(ie_Contrast.enhance(2.0))

# 色彩增强
# 图片的色彩平衡,相当于彩色电视机的色彩调整
ie_Color = ImageEnhance.Color(im) 
plt.subplot(235);plt.title('ie_Color')
plt.imshow(ie_Color.enhance(2.0))
plt.axis('off')  # 关掉坐标轴
plt.show()

    time: 584 ms

6 图像滤镜

ImageFilter是PIL的滤镜模块,通过这些预定义的滤镜,
可以方便的对图片进行一些过滤操作,从而去掉图片中的噪音(部分的消除),
这样可以降低将来处理的复杂度(如模式识别等)。

滤镜名称                      含义
ImageFilter.BLUR          模糊滤镜
ImageFilter.CONTOUR       轮廓
ImageFilter.EDGE_ENHANCE    边界加强
ImageFilter.EDGE_ENHANCE_MORE    边界加强(阀值更大)
ImageFilter.EMBOSS                 浮雕滤镜
ImageFilter.FIND_EDGES         边界滤镜
ImageFilter.SMOOTH                       平滑滤镜
ImageFilter.SMOOTH_MORE      平滑滤镜(阀值更大)
ImageFilter.SHARPEN                    锐化滤镜
# 实际上这个可以使用一个循环来批量处理的
# 读者朋友可以自己试一试
import matplotlib.pyplot as plt
from PIL import Image
from PIL import ImageFilter                         
im = Image.open(path)

# 设置画布大小
plt.figure(figsize=(18, 8))

plt.subplot(251); plt.title('original'); plt.imshow(im)

im1 = im.filter(ImageFilter.BLUR)  # 均值/模糊滤波
plt.subplot(252); plt.title('ImageFilter.BLUR'); plt.imshow(im1)

im2 = im.filter(ImageFilter.CONTOUR)  # 寻找轮廓
plt.subplot(253); plt.title('ImageFilter.CONTOUR'); plt.imshow(im2)

im3 = im.filter(ImageFilter.EDGE_ENHANCE)  # 边界加强
plt.subplot(254); plt.title('ImageFilter.EDGE_ENHANCE'); plt.imshow(im3)

im4 = im.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 边界加强(阀值更大)
plt.subplot(255); plt.title('ImageFilter.EDGE_ENHANCE_MORE'); plt.imshow(im4)

im5 = im.filter(ImageFilter.EMBOSS)  # 浮雕滤镜
plt.subplot(256); plt.title('ImageFilter.EMBOSS'); plt.imshow(im5)

im6 = im.filter(ImageFilter.FIND_EDGES)  # 边界滤镜
plt.subplot(257); plt.title('ImageFilter.FIND_EDGES'); plt.imshow(im6)

im7 = im.filter(ImageFilter.SMOOTH)  # 平滑滤镜
plt.subplot(258); plt.title('ImageFilter.SMOOTH'); plt.imshow(im7)

im8 = im.filter(ImageFilter.SMOOTH_MORE)  # 平滑滤镜(阈值更大)
plt.subplot(259); plt.title('ImageFilter.SMOOTH_MORE'); plt.imshow(im8)

im9 = im.filter(ImageFilter.SHARPEN)  # 锐化滤镜
plt.subplot(2,5,10); plt.title('ImageFilter.SHARPEN'); plt.imshow(im9)
plt.axis('off')  # 关掉坐标轴

plt.show()

    time: 1.39 s

7 图像直方图

7-1 灰度图直方图

多维变换:a.reshape(2,3)
展平为一维:a.ravel()/a.flatten()

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

im = Image.open(path).convert('L')  # 加载图像为灰度
print('>>>像素大小:', im.size)
im_to_array = np.array(im)  # 将图像转换成数组
x_value = im_to_array.flatten()  # 将数组展平为一维数组

result = plt.hist(x=x_value,  # x 轴一维数据
         bins=None,  # 柱子的大小,默认为 10(即 None)
         color='yellow',  # 柱子的颜色
         normed=0,  # 是否归一化处理,默认为 0,非 0 就进行归一化处理
         alpha=0.9  # 柱形图透明度,取值区间 [0, 1]——>[暗,亮]
        )
print('\n>>> X 轴元素对应着出现的次数 n:\n', result[0])
print('\n>>> X 轴元素值 bins:\n', result[1])

plt.title('gray color')
plt.xlabel('gray_value')
plt.ylabel('gray_counts')
plt.show()
    >>>像素大小: (200, 200)

    >>> X 轴元素对应着出现的次数 n:
     [   31.   349.  1248.  6690.  2089.   366.   179.   465. 10567. 18016.]

    >>> X 轴元素值 bins:
     [  4.   29.1  54.2  79.3 104.4 129.5 154.6 179.7 204.8 229.9 255. ]

    time: 186 ms

7-2 彩色图直方图

灰度直方图和彩色直方图差不多,只不过灰度图只有一个颜色通道,而彩色图有多个通道,如 RGB等

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

im = Image.open(path)
r, g, b = im.split()  # 分割颜色通道
r_value = np.array(r).flatten()  # 将图片转换成数组并展平为一维数组
plt.hist(x=r_value, bins=30, normed=0,facecolor='r',edgecolor='r')

g_value = np.array(g).flatten()
plt.hist(x=g_value, bins=30, normed=0, facecolor='g',edgecolor='g')

b_value = np.array(b).flatten()
plt.hist(x=b_value, bins=30, normed=0, facecolor='b',edgecolor='b')

plt.title('RGB color')
plt.xlabel('R_G_B_value')
plt.ylabel('R_G_B_counts')
plt.show()

    time: 332 ms

8 图像通道运算

暂时不写出来,有空就更新....


图像向量化

将图像向量化之后才能进行相关的算法进行图片分类、模式识别等

1 图像转换为数组

import numpy as np
from PIL import Image

im = Image.open(path)
im

    time: 12.8 ms
im_array = np.array(im)
print('>>>图像大小:', im.size)
print('\n>>>图像通道模式:%s'%im.mode)
print('\n', '---'*10, '\n>>>图像信息:', im_array.shape)
print('\n>>>图像宽度:%d  \n>>>图像高度:%d  \n>>>图像通道数:%d'%(im_array.shape[0],
                                                                 im_array.shape[1],
                                                                 im_array.shape[2]))
print(im_array[:2].shape)
im_array[:2]
    >>>图像大小: (200, 200)

    >>>图像通道模式:RGB

     ------------------------------ 
    >>>图像信息: (200, 200, 3)

    >>>图像宽度:200  
    >>>图像高度:200  
    >>>图像通道数:3
    (2, 200, 3)

    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)



    time: 5.28 ms

2 数组转换成图像

from PIL import Image

im = Image.open(path)  # 原始图像
im_array = np.array(im)  # 图像转换成数组
array_im = Image.fromarray(im_array)  # 数组转换成图像
array_im

    time: 13.1 ms

3 图像处理成三维数组

适用于深度学习 CNN 等训练

import numpy as np
from PIL import Image

# resize 统一图像像素
im1 = np.array(Image.open(path).convert('L').resize((28,28)))
im2 = np.array(Image.open(path).convert('L').resize((28,28)))
print(im1.shape)
print(im2.shape)
# im1
    (28, 28)
    (28, 28)
    time: 4.89 ms
# 灰色图只有一个通道
im11 = im1.reshape(1,28,28)
im22 = im2.reshape(1,28,28)
print(im11.shape)
print(im22.shape)
# im11
    (1, 28, 28)
    (1, 28, 28)
    time: 852 µs
im3 = np.vstack((im11,im22))  # 以行的维度添加
print(im3.shape)

# 设置图形信息
sample_counts, channels, width, height = im3.shape[0], 1, im3.shape[1], im3.shape[2]
im33 = im3.reshape(sample_counts,  # 样本数量
                   channels,  # 频道数
                   height,  # 一个样本中的行数量
                   width  # 一个样本中的列数量
                  )
print(im33.shape)
# 将像素值缩放到 [0 1] 区间
im33 = im33/255
im33
    (2, 28, 28)
    (2, 1, 28, 28)


    array([[[[1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.],
             ...,
             [1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.]]],


           [[[1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.],
             ...,
             [1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.],
             [1., 1., 1., ..., 1., 1., 1.]]]])

    time: 5.25 ms

4 图像处理成二维数组

适用于机器学习算法,如 sklearn 系列

import numpy as np
from PIL import Image

# 灰度处理后,resize 统一图像像素,并且展平为一维
im1 = np.array(Image.open(path).convert('L').resize((28,28))).ravel()
im2 = np.array(Image.open(path).convert('L').resize((28,28))).ravel()
im3 = np.array(Image.open(path).convert('L').resize((28,28))).ravel()
print(im1.shape)
print(im2.shape)
print(im3.shape)
# im1
    (784,)
    (784,)
    (784,)
    time: 6.72 ms
im4 = np.vstack((im1,im2, im3))  # 以行的维度添加
print(im4.shape)
# 将像素值缩放到 [0 1] 区间
im4 = im4/255
im4
    (3, 784)

    array([[1., 1., 1., ..., 1., 1., 1.],
           [1., 1., 1., ..., 1., 1., 1.],
           [1., 1., 1., ..., 1., 1., 1.]])

    time: 3.75 ms

图像识别分类实战

现在暂时没做,以后有空小知同学会以一个个步骤性的方式来写,相信大家都能看得懂和学得会


参考文献

  • https://www.jianshu.com/p/e8d058767dfa

  • https://blog.csdn.net/zhangziju/article/details/79123275

  • https://www.cnblogs.com/chimeiwangliang/p/7130434.html


免责声明


[推荐] 语音信号的预处理

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


[推荐] 计算机视觉-OpenCV图像处理模块

2022-03-31 21:15:04    博客笔记    559    分类:算法开发    专栏:图像预处理   


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

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



转发此文章到社区


关注公众号进群

让志同道合读者学习交流



IEEE PHM 2012竞赛数据集

IEEE PHM 2012竞赛数据集,该数据集是2012的PHM数据集,详细可在下载文件中了解。

2021-12-04 22:40:01    博客笔记    4617    分类:边缘感知    专栏:轴承   


OPPORTUNITY动作识别数据集

OPPORTUNITY动作识别数据集

2021-12-04 23:22:36    博客笔记    586    分类:边缘感知    专栏:动作识别   


数字信号处理期末总复习

DSP期末总复习基于教材:《数字信号处理——原理、实现及应用(第3版)》 高西全等 编著一、基本概念1.1 信号1.2 系统1.3 卷积1.4 差分方程二、傅里叶变换2.1 连续信号:CTFT和CTFS2.2 时域离散信号:DTFT和DTFS2.3 周期信号的傅里叶变换2.4 离散傅里叶变换(DFT)2.5 快速傅里叶变换(FFT)三、Z变换3.1 Z变换3.2 Z变换的性质3.3 逆Z变换3.4 Z变换的应用四、模拟信号数字处理五、滤波器5.1 一些散落的实例5.

2021-12-14 10:44:43    互联网    795    分类:算法开发    专栏:数字信号处理   


深度学习对振动类光谱信息的处理论文笔记

光谱原始数据通常存在伪影,噪声等问题,而预处理步骤可能对准确率造成影响,同时对不同数据的适应性差,神经网络能提供端到端的方法(或者省去某个预处理步骤),因而具有一定前景。数据驱动的深度学习技术可以发现大数据集中复杂的结构,并从数据中提取关键特征。一.综述文章:Deep learning for vibrational spectral analysis: Recent progress and a practical guide(2019)自2017年提出,将深度学习应用于光谱处理这一领域,迄

2021-12-14 22:12:02    互联网    740    分类:论文速递    专栏:未分组   


时间序列分类算法之LPS论文翻译

本文主要翻译LPS论文的主体部分,由于水平有限,可能翻译的不够准确。算法原文连接为基于局部自动模式的时间序列表示与相似度摘要:随着从医学、金融、多媒体等不同领域的时间序列数据集的增加,时间序列数据挖掘受到更多人的关注。对于减少维数和产生有用的相似性度量来说,时间序列表示是很重要的。高阶表示,如傅立叶变换,小波,分段多项式模型等,是以前所提出来的。最近,自回归核被用来反映时间序列的相似性。我...

2021-12-21 15:50:53    互联网    494    分类:论文速递    专栏:时间序列预测   


TensorFlow实现时间序列预测

常常会碰到各种各样时间序列预测问题,如商场人流量的预测、商品价格的预测、股价的预测,等等。TensorFlow新引入了一个TensorFlow Time Series库(以下简称为TFTS),它可以帮助在TensorFlow中快速搭建高性能的时间序列预测系统,并提供包括AR、LSTM在内的多个模型。
时间序列问题
  一般而言,时间序列数据抽象为两部分:观察的时间...

2021-12-25 19:50:04    互联网    756    分类:算法开发    专栏:时间序列预测   


keras实现LSTM单变量时间序列预测——国际航班乘客预测

https://blog.csdn.net/zyxhangiian123456789/article/details/87458140对于较为简单的时间序列预测问题,可以使用Exponential Smoothing和ARIMA等传统模型非常方便地求解。然而,对于复杂的时间序列预测问题,LSTM不失为一种很好的选择。因此,本文旨在探讨如何利用LSTM神经网络求解时间序列预测问题。首先,需要明白时...

2021-12-25 19:50:56    互联网    443    分类:算法开发    专栏:时间序列预测   


数字信号处理的主要内容

随着计算机和微电子等学科的飞速发展,数字信号处理的理论、算法和实现方法都获得了快速发展,应用也越来越多。数字信号处理的内容广泛,理论复杂,主要包括以下部分:1、离散时间信号与离散时间系统2、Z变换及离散时间系统分析3、离散时间信号的傅里叶变换4、快速傅里叶变换5、离散时间系统的相位、结构和状态变量描述6、无限冲激响应数字滤波器设计7、有限冲激响应数字滤波器设计8、信

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


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

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

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


计算机视觉-OpenCV视频处理

opencv视频处理主要设计了实时摄像头读取视频,本地视频读取并处理两个大的方面, 主要介绍了视频读取及处理的基本操作,内容概述如下: * 摄像头视频读入、本地视频读入 * 图像及视频写入保存 * 视频流单帧单帧处理 * 每一帧视频流的基本属性,如帧率、视频流宽度高度等

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


  • 52phm公告

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


图像预处理   
  • 关于站长


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


当前文章目录


52phm社区

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

Saas体验

+ 工业demo学习系统

技术博客

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

+ 设备机理    + 开发环境

+ 论文速递   

友情链接

+ 在码圈

联系我

Copyright© 2021 52phm社区

京ICP备2021029973号-1