补充知识:tensorflow中两种读图及裁剪图片的区别(io.imread和cv2.imread)以及(transform.resize和cv2.resize)
最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该 read the fuck code和API document,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释了。
学习数字图像处理,第一步就是读取图像。这里我总结下如何使用 opencv3,scikit-image, PIL 图像处理库读取图片并显示。
算法:快速移位图像分割算法(QuickShift)是一种与基于核均值漂移算法近似的二维图像分割算法,属于局部的(非参数)模式搜索算法系列(每个数据点关联到基础概率密度函数模式),QuickShift图像分割同时在多个尺度上计算分层分段并应用于由颜色空间和图像位置组成的五维空间中。dst=skimage.segmentation.quickshift(img, ratio, kernel_size, max_dist, return_tree, sigma, convert2lab, random_seed)
Compact watershed segmentation number of segments: 256
本文进入热榜收到了不少关注,所以将本文的代码放在了GitHub上,jupyter的,有需要的自取。
本节讲解如何利用opencv、PIL、 scikit-image等工具进行图像读取、图像保存、图像缩放、裁剪、旋转、颜色转换等基本操作。
import cv2 import numpy as np from skimage.io import imread from skimage.color import rgb2gray from skimage.measure import ransac from skimage.util import img_as_float from matplotlib import pylab as pylab from skimage.feature import corner_harris, corner
目录 1,图像特征 2,角点特征 3,使用OpenCV和PIL进行特征提取和可视化 4,特征匹配 5,图像拼接
import cv2 from skimage.feature import hog from skimage import exposure im=cv2.imread('C:/Users/xpp/Desktop/Lena.png')#原始图像 im_gray=rgb2gray(im)#将彩色图片转换为灰度图片 fd, hog_image=hog(im, orientations=8,pixels_per_cell=(16,16),cells_per_block=(1,1),visualize=True
算法:灰度分层是按照灰度值范围划分为不同的层级,然后给每个层级赋予不同的颜色,从而增强不同层级的对比度。灰度分层技术将灰度图像转换为伪彩色图像,且伪彩色图像的颜色种类数目与强度分层的数目一致。
算法:DoG斑点检测类似于LoG。DoG在每层金字塔多做一次高斯操作,但通过减法取代LoG核的计算过程,显著减少了运算次数,大大节省了运算时间。
算法:enhance_contrast滤波器是对比度增强滤波,首先计算局部区域最大值和最小值,然后查看当前点像素值最接近最大值还是最小值,最后替换为最大值或最小值。原始图像中每个像素与模糊图像中对应像素之间的亮度差异表示像素针对其相邻者的对比程度。该像素的亮度随后会与局部坐标对比度成比例变化。模糊之后更暗的像素必须比其相邻者更亮,因此其亮度会进一步提高,而如果像素在模糊之后更暗,则它甚至将变暗更多,在细节最显著的图像区域中选择性地增大对比度。钝化遮蔽的参数是像素半径(越过该半径的颜色会模糊)、该效果对亮度的改变程度以及对比度“阈值”(低于该阈值不会进行任何亮度变化)。
算法:LoG斑点检测是通过搜索LoG的三维极值(位置+尺度)来寻找尺度不变区域。如果拉普拉斯算子的规模(LoG滤波器的σ)与斑点的规模匹配,拉普拉斯算子响应的大小在斑点的中心达到最大值。增加的σ计算LoG卷积图像,并堆叠在一个立方体中。这些小块对应于这个立方体中的局部最大值,用来检测黑暗背景上的亮斑。虽然是准确的,但是速度很慢(特别是对于检测较大的斑点)。
项目地址:https://github.com/Oldpan/Pytorch-Learn/tree/master/Image-Processing
算法:DoH斑点检测是通过计算图像黑塞行列式矩阵中的极大值来检测斑点。斑点的大小对检测速度没有任何影响。该方法既能检测到深色背景上的亮斑,也能检测到浅色背景上的暗斑,但不能准确地检测到小亮斑。理论上,与LOG相比,DOH对细长结构的斑点有较好的抑制作用。
算法:彩色变换是将红色变换、绿色变换和蓝色变换的映射关系绘制到一幅图像,可以表示灰度图像到彩色图像的红色通道、绿色通道和蓝色通道的映射关系。
概述 来源:pyimagesearch 编译:AI算法与图像处理 我想应该很多人都玩过腾讯的这款游戏《大家来找茬》,想当年不知道多少人用鼠标对着美女图一顿输出,就是找不到哪里不一样。 今天我们要用到图像技术可以应用到这个上面。
https://tianchi.aliyun.com/competition/entrance/531795/introduction
1. 学习目标 图像色彩空间; 函数说明与解释; 学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等; 学习 cv.cvtColor 函数的使用。 2. 常见色彩空间 📷 3. 常见色彩空间说明 名称 说明 HSV 对计算机友好,区分各种色彩。 RGB 设备独立。 YCrCb Y分量表示信息,CrCb可以被压缩。 RGB是计算机显示器的标准支持色彩系统。 4. 常见色彩空间取值范围 名称 范围 HSV H:0-180;SV:0-255 RGB 0-255 5. 色彩空间转换
在OpenCV中,有超过150种色彩空间转换方法。但我们只研究两种最广泛使用的方法:BGR ↔ Gray和BGR ↔ HSV。
【Labeling superpixel colorfulness with OpenCV and Python】,仅做学习分享。
算法:entropy滤波是图像局部熵,熵是使用基为2的对数运算出来的,将局部区域的灰度值分布进行二进制编码,返回编码的最小值。
视频的每一帧就是一张图片,跟踪视频中的某一对象,分解下来,其实就是在每一帧的图片中找到那个对象。
算法:形态学无边缘活动轮廓(MorphACWE,morphological chan vese)是指一组用于图像分割的方法(类似于活动轮廓算法)。形态学蛇算法比活动轮廓算法更快且在数值上更稳定,因为它们在二进制数组上使用形态学运算符(如膨胀/腐蚀),而活动轮廓算法是在浮点数组上求解偏微分方程。
该文章介绍了如何计算两个矩形框的重叠面积以及交并比,并提供了具体的Python代码示例。同时,文章还介绍了如何利用PIL库中的ImageDraw模块来绘制矩形框和文字。此外,文章还介绍了如何将计算得到的交并比结果可视化,并给出了一个示例代码。
算法:图像骨架提取是将一个连通区域细化成一个像素的宽度用于特征提取和目标拓扑表示。
显然OpenCV中常见的轮廓分析无法获得上面的中心红色线段,本质上这个问题是如何提取二值对象的骨架,提取骨架的方法在OpenCV的扩展模块中,另外skimage包也支持图像的骨架提取。这里就分别基于OpenCV扩展模块与skimage包来完成骨架提取,得到上述图示的中心线。
算法:dequalize滤波是均衡化滤波,利用局部直方图对图像进行均衡化滤波。直方图对图像进行均衡化滤波从本质上是一种归一化算法,将目前灰度区间较窄的范围通过一种非线性的方式在整个像素可视空间重映射,最后达到一种图像增强效果的目的。但是直方图均衡化无法表达具体的像素位置,因为直方图本身也仅仅表达某一灰度值出现的概率,并未体现该灰度值所在的位置信息。直方图均衡化处理之后,原来比较少像素的灰度会被分配到其他的灰度,像素相对集中, 处理后灰度范围变大,对比度变大,清晰度变大,达到有效增强图像的目的。
使用cv2都进来是一个numpy矩阵,像素值介于0~255,可以使用matplotlib进行展示
在图像中,最小的单位是像素,每个像素周围有 8 个邻接像素,常见的邻接关系有 2 种:4 邻接与 8 邻接。4 邻接一共 4 个点,即上下左右、8 邻接的点一共有 8 个,包括了对角线位置的点,如下图所示
经过采样和量化之后,图像I已经称为空间位置和响应值均离散的数字图像。图像上的每个位置(x,y)以及其对应量化响应值称为一个像素。
算法:形态学测地线活动轮廓(MorphGAC,morphological geodesic active contour)是指一组用于图像分割的方法(类似于活动轮廓算法)。形态学蛇算法比活动轮廓算法更快且在数值上更稳定,因为它们在二进制数组上使用形态学运算符(如膨胀/腐蚀),而活动轮廓算法是在浮点数组上求解偏微分方程。
算法:bottomhat滤波是先计算图像的形态学的闭运算,然后用原图像减去运算的结果值,有点像黑帽操作。bottomhat使用结构元素计算区域的闭合,闭合结果与原始区域之间的差异。与在特定情况下合并区域的闭运算不同,bottom_hat计算通过这种合并生成的区域。结构元素的位置没有意义,因为闭运算对于参考点的选择是不变的。结构元素可选择,圆、矩形、椭圆、区域多边形、区域点等操作符生成。
算法:简单线性迭代聚类(Slic,simple linear iterativeclustering)算法是将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。SLIC算法生成紧凑、近似均匀的超像素,在运算速度,物体轮廓保持、超像素形状方面具有较高的综合评价,比较符合人们期望的分割效果。如果要得到良好的效果,那么必须在Lab颜色空间中执行该算法。该算法发展迅速,并且得到了广泛的应用。
Region Adjacency Graph number of segments: 1183
我们现在使用的模型实现人脸检测,在2080TI上,大概13帧每秒,慢是慢了点,不过胜在精度比较高,如上图所示,都能正确识别,关键点也很准确。这是人脸检测。 在人脸检测之后,如果我们需要做人脸比对或者匹配,通常就需要先进行人脸对齐,这样在提取特征会更有效。所谓人脸对齐,其实就是将原来倾斜等的人脸转换成端正的。如下图:
正如IDC所指出的,数字信息将飙升至175ZB,而这些信息中的巨大一部分是图片。数据科学家需要(预先)测量这些图像,然后再将它们放入人工智能和深度学习模型中。在愉快的部分开始之前,他们需要做重要的工作。
在说明直方图均衡之前,先说说亮度直方图的概念。为了评估一个图像的色调转换,首先需要建立亮度直方图。亮度直方图就是图像中亮度分布的图表。在横轴上表示亮度值从黑色到白色;在竖轴上表示某一亮度所累积的像素数量。这里的亮度值指的是灰度等级,范围一般从 0 到 255,0 表示黑色,255 表示白色。
在用python进行图像处理时,二值化是非常重要的一步,现总结了自己遇到过的6种 图像二值化的方法(当然这个绝对不是全部的二值化方法,若发现新的方法会继续新增)。
github:https://github.com/idealo/imagededup
算法:ORB暴力匹配是一幅图像的特征描述符与另一幅图像中的所有特征匹配(使用一些距离度量),并返回最近的一个。ORB算法结合了FAST算法与BRIEF算法优点,是目前最快的目标检测算法。
图像的实质是一种二维信号,滤波是信号处理中的一个重要概念。在图像处理中,滤波是一常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是很多图像算法的前置步骤或基础,掌握图像滤波对理解卷积神经网络也有一定帮助。
算法:gradient滤波是通过图像的局部梯度值(如:最大值-最小值)替换区域内所有像素值。结构元素可选择,圆、矩形、椭圆、区域多边形、区域点等操作符生成。
算法:SIFT暴力匹配是通过识别两个图像之间的SIFT关键点最近的邻居来进行匹配。但在某些情况下,由于噪声等因素,第二个最接近的匹配似乎更接近第一个匹配。在这种情况下,计算最近距离与第二最近距离的比率,并检验它是否大于0.8。如果比率大于0.8,则表示拒绝。这有效地消除了约90%的错误匹配,且只有约5%的正确匹配。
本篇博文分享一篇寻找图像中灯光亮点(图像中最亮点)的教程,例如,检测图像中五个灯光的亮点并标记,项目效果如下所示:
- 高斯噪声(Gaussian noise)是指它的概率密度函数服从高斯分布的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。
入职了之后挺忙,已经好久没有做一些科普性的更新了。近期已做了些学术要求不高的工作,所以刚好有时间写写总结。
最近在研究深度学习视觉相关的东西,经常需要写python代码搭建深度学习模型。比如写CNN模型相关代码时,我们需要借助python图像库来读取图像并进行一系列的图像处理工作。我最常用的图像库当然是opencv,很强大很好用,但是opencv也有一些坑,不注意的话也会搞出大麻烦。近期我也在看一些别人写的代码,因为个人习惯不一样,他们在做深度学习时用于图片读取的图像库各不相同,从opencv到PIL再到skimage等等各种库都有,有些库读进来的图片存储方式也不太一样,如果不好好总结这些主流图像读写库特点的话,以后看代码写代码都会遇坑无数。这篇文章就总结了以下主流Python图像库的一些基本使用方法和需要注意的地方:
Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略
领取专属 10元无门槛券
手把手带您无忧上云