图像处理

图像处理——提取梯度

只谈情不闲聊 提交于 2020-03-07 17:21:15
1.图像的梯度——定义(百度百科) 根据图像梯度可以把图像看成二维离散函数f(x,y),图像梯度其实就是这个二维离散函数的求导(即f(x,y)的求导得G(x,y)): 图像梯度: G(x,y) = dx(i,j) + dy(i,j); dx(i,j) = I(i+1,j) - I(i,j); dy(i,j) = I(i,j+1) - I(i,j); 其中,I是图像像素的值(如:RGB值),(i,j)为像素的坐标。 图像梯度一般也可以用中值差分: dx(i,j) = [I(i+1,j) - I(i-1,j)]/2; dy(i,j) = [I(i,j+1) - I(i,j-1)]/2; 梯度的方向是图像函数f(x,y)变化最快的方向,当图像中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度, 由图像梯度构成的图像成为梯度图像 。 2.图像梯度作用 a.通过图像的梯度提取边缘信息,可用于边缘检测; b.通过图像的梯度计算灰度变化情况,增强图像质量。 3.python3实现图像梯度提取 class Image_Gradent(): def __init__(self,image_name): self.img = image_name; #Sobel算子 def sobel_demo(self): grad

图像处理100问(1~5)

大兔子大兔子 提交于 2020-03-05 14:55:55
小记: 问题1 — RGB与BGR转换 问题2 — BGR灰度化 问题3 — 二值化 问题4 — 大津二值化算法 问题5 — RGB转HSV 一方面是考察图像的以上原理,一方面是考察numpy的使用。 参考: numpy库的基本使用 问题一:通道交换 读取图像,然后将 RGB \text{RGB} RGB 通道替换成 BGR \text{BGR} BGR 通道。 下面的代码用于提取图像的红色通道。 解析: 要把蓝色部分变成红色,而图中蓝色明显,说明B通道灰度值小,故而可以交换 B和R通道中的数值,这样B通道灰度值大,颜色变浅,B通道的灰度值变小,颜色变深,红色也就显现出来了。 import cv2 def BGR2RGB ( img ) : b = img [ : , : , 0 ] . copy ( ) g = img [ : , : , 1 ] r = img [ : , : , 2 ] img [ : , : , 0 ] = r img [ : , : , 1 ] = g img [ : , : , 2 ] = b return img img = cv2 . imread ( "imori.jpg" ) img = BGR2RGB ( img ) cv2 . imshow ( "result" , img ) cv2 . waitKey ( ) 问题二:灰度化

计算机视觉——图像处理基础

好久不见. 提交于 2020-03-05 09:49:29
一、 图像轮廓和直方图 1.1原理 图像轮廓:因为绘制轮廓需要对每个坐标的像素值施加一个阈值,所以首先需要将图像灰度化。 直方图:用来表征该图像像素值得分布情况。用一定的小区间来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。——》hist()函数:参数二:指定小区间的数目。参数一:只接受一维数组作为输入,因此在绘制图像直方图前,必须对图像进行压平处理。 1.1图像轮廓和直方图得实现 在原点的左上角显示轮廓图像 contour(im,origin= 'image')。 # -*- coding: utf-8 -*- from PIL import Image from pylab import * # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14) im = array(Image.open(r'C:\Users\mangowu\Desktop\1\1.jpg').convert('L')) # 打开图像,并转成灰度图像 figure() subplot(121) gray() contour(im, origin='image') axis(

灰度转换(1):RGB分量实现Gray灰度效果

六眼飞鱼酱① 提交于 2020-03-04 10:37:03
  Gray灰度图像:即我们常说的黑白图像,由黑到白的灰阶为 0- 255(8bit)。   本博客整理一下 RGB 分量实现 Gray 灰度效果的实验,这个实验非常的简单,简单到看到代码就感觉非常无语...... 一、RGB分量转Gray灰度的原理   RGB格式即一个像素由R、G、B三基色构成,例如 RGB565 格式的像素排列为R[4:0]、G[5:0]、B[4:0],RGB三个分量的数值不同,最后合成的像素颜色则不同。   RGB分量转Gray灰度即只挑取 R 或 G 或 B 的 1 个分量,剩下的 2 个分量丢弃,其位置由挑取的分量来替代。 二、MATLAB   此次实验选择了一张 RGB 分量明显的图片,先从 MATLAB 软件中查看效果如何。代码如下所示: clc; clear all; RGB = imread('flower.bmp'); %读取图像 R_gray = RGB(1:end,1:end,1); %提取R分量后的灰度图 G_gray = RGB(1:end,1:end,2); %提取R分量后的灰度图 B_gray = RGB(1:end,1:end,3); %提取R分量后的灰度图 subplot(2,2,1);imshow(RGB); title('原图'); subplot(2,2,2);imshow(R_gray);title('R分量灰度图');

06-01 DeepLearning-图像识别

房东的猫 提交于 2020-03-03 11:50:33
文章目录 深度学习-图像识别 人脸定位 手工提取特征的图像分类 识图认物 传统分类系统的特征提取 计算机眼中的图像 什么是图像特征? 卷积运算 利用卷积提取图像特征 基于神经网络的图像分类 传统图像分类系统和深度神经网络 深度神经网络的架构 卷积层 池化层 全连接层 归一化指数层 非线性激活层 Sigmoid函数 双曲正切函数 ReLU函数 深度神经网络的训练 反向传播算法 图像分类应用——人脸识别 人脸识别的流程 人脸识别应用场景 小结 深度学习-图像识别 人脸定位   相信你们外出游玩的时候,都不会带上你的牛逼plus诺基亚手机出门,而是带上你的智能手机给自己美美的拍上一张。当你用手机镜头对准人脸的时候,都会出现一个矩形框,如下图所示(前方高能),那么这个技术是怎么做到的呢?   相机中的人脸定位技术用的是二分类技术。该技术流程如下图所示。   如上图所示,相机首先会将照片分割成一块块的图像块,一张照片往往会有成千上万的图像块被切割出来。   然后每一个图像块都会经过人脸分类器去判别是否是人脸。人脸分类器是预先训练好的分类器,类似于我们之前讲的手写数字识别应用程序中的支持向量机分类器。如果人脸分类器预测该图像块为人脸,相机则会在这个图像块中显示出框的位置。   在人脸定位中,为了解决由于手机离人的距离不同,导致手机上显示的人脸大小不一致的问题。手机在切割图像的时候

opencv图像处理之形态学转换

北战南征 提交于 2020-03-01 03:33:32
文章目录 1.腐蚀、膨胀、梯度 2.开运算、闭运算、礼帽、黑帽 3.创建不同形状的核 1.腐蚀、膨胀、梯度 形态学操作: 根据图像形状进行的简单操作。一般情况下对 二值化图像 进行的操作。 腐蚀: 就像土壤侵蚀一样,这个操作会把前景物体的边界腐蚀掉(但是前景仍然是白色)。这是怎么做到的呢?卷积核沿着图像滑动,如果 与卷积核对应的原图像的所有像素值都是1 ,那么中心元素就保持原来的像素值,否则就变为零。这对于去除白噪声很有用,也可以用来断开两个连在一块的物体等。 膨胀: 与腐蚀相反, 与卷积核对应的原图像的像素值中只要有一个是1 ,中心元素的像素值就是1。所以这个操作会增加图像中的白色区域(前景)。一般在去噪声时先用腐蚀再用膨胀。因为腐蚀在去掉白噪声的同时,也会使前景对象变小。所以我们再对他进行膨胀。这时噪声已经被去除了,不会再回来了,但是前景还在并会增加。膨胀也可以用来连接两个分开的物体。 梯度: 其实就是一幅图像膨胀与腐蚀的差别。结果看上去就像前景物体的轮廓。 代码速记: cv2.erode() cv2.dilate() cv2.morphologyEx():cv2.MORPH_GRADIENT 参数解释: cv2 . erode ( raw_binary , kernel , iterations = 1 ) #原图像、卷积核、迭代次数 cv2 . dilate ( raw

opencv图像处理之直方图

末鹿安然 提交于 2020-02-29 14:10:44
文章目录 0.什么是直方图 1.整幅图像的直方图 2.部分图像的直方图(使用mask) 0.什么是直方图 通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的x 轴是灰度值(0 到255),y 轴是图片中具有同一个灰度值的点的数目。 统计直方图的几个重要参数: BINS : 直方图显示了每个灰度值对应的像素数。如果像素值为0到255,你就需要256 个数来显示上面的直方图。但是,如果你不需要知道每一个像素值的像素点数目的,而只希望知道两个像素值之间的像素点数目怎么办呢?举例来说,我们想知道像素值在0 到15 之间的像素点的数目,接着是16 到31,…,240 到255。我们只需要16 个值来绘制直方图。 那到底怎么做呢?你只需要把原来的256 个值等分成16 小组,取每组的总和。而这里的每一个小组就被成为BIN。第一个例子中有256 个BIN,第二个例子中有16 个BIN。在OpenCV 的文档中用 histSize 表示BINS。 DIMS : 表示我们收集数据的参数数目。在本例中,我们对收集到的数据只考虑一件事:灰度值。所以这里就是1。 RANGE : 就是要统计的灰度值范围,一般来说为[0,256],也就是说所有的灰度值。 1.整幅图像的直方图 代码速记: plt.hist() cv2.calcHist() np.histogram() np.bincount()

iOS中使用像素位图(CGImageRef)对图片进行处理

血红的双手。 提交于 2020-02-29 08:41:21
iOS中对图片进行重绘处理的方法总结 一、CGImageRef是什么 CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写。在CGImage.h文件中,我们可以看到下面的定义: typedef struct CGImage *CGImageRef; CGImageRef 和 struct CGImage * 是完全等价的。这个结构用来创建像素位图,可以通过操作存储的像素位来编辑图片。 QuartzCore这个框架是可移植的。 二、CGImageRef相关的一些方法解析 CFTypeID CGImageGetTypeID( void ) 这个方法返回的是一个编号,每个 Core Foundation框架中得结构都会有一个这样的编号,CFTypeID定义如下: #if __LLP64__ typedef unsigned long long CFTypeID; typedef unsigned long long CFOptionFlags; typedef unsigned long long CFHashCode; typedef signed long long CFIndex; #else typedef unsigned long CFTypeID; typedef unsigned long CFOptionFlags; typedef

FFmpeg图像处理深度应用

半世苍凉 提交于 2020-02-27 08:26:39
本演讲主要讲解如何通过FFmpeg作为一个主要的接口,将OpenGL、OpenCV以及诸如Tensorflow等AI框架以第三方库的形式,作为FFmpeg的一个模块进行快速的业务开发,从而简化音视频图像处理的开发流程,为听众打开一个新思路。 文 / 刘歧 整理 / LiveVideoStack 审校/ 赵军 感谢大家关注FFmpeg在OnVideo以及AI方面的一些工作,我是刘歧,是OnVideo联合创始人的同时也担任技术负责人,同时也是FFmpeg的官方顾问,FFmpeg GSoC 2019 Mentor,FFmpeg决策委员会的委员,以及腾讯云TVP。我主要的兴趣在嵌入式开发、图形图像及音视频流媒体处理、分布式系统设计等领域。FFmpeg官方有我的联系方式,大家有问题可以和我随时交流。关于FFmpeg深度学习场景下的应用,目前看来,颇具价值且实用。 1. 契机 首先介绍一下我们的公司,OnVideo是一个音视频在线编辑云平台,上图是制作人员的处理过程中效果预览这个功能的一个展示。OnVideo云平台可以支持很多的图像处理相关功能,但实际上它并不限于视频和图片相关,它大量的使用了FFmpeg的一些内置功能以及AI相关的框架与算法,其具体功能大约如下图所示: 另外一个需要附带提及的事情是我在2019年Google Summer of

图像识别过程

孤街浪徒 提交于 2020-02-26 09:36:25
图像识别过程=图像处理+图像识别; 图像处理一般指数字图像处理:   处理的目的是去除干扰,噪声,将原始图像变成适于计算机进行特征处理的形式; 图像采样: 图像增强 图像复原 图像编码与压缩 图像分割技术 图像识别:将图像处理得到的图像进行特征提取和分类。 统计法 句法识别法 神经网络方法 模板匹配法 来源: https://www.cnblogs.com/djrcomeon/p/12365107.html