图像像素

STN-Spatial Transformer Networks-论文笔记

痴心易碎 提交于 2020-01-07 19:58:43
原文链接: https://arleyzhang.github.io/articles/7c7952f0/ 论文地址: https://arxiv.org/abs/1506.02025 1 简介 1.2 问题提出 CNN在图像分类中取得了显著的成效,主要是得益于 CNN 的深层结构具有 空间不变性(spatially invariance)(平移不变性,旋转不变性),所以图像上的目标物体就算是做了平移或者旋转,CNN仍然能够准确的识别出来,这对于CNN的泛化能力是有益的。 空间不变性主要是由于 Pooling 层 和 步长不为1的卷积层 的存在带来的。实际上主要是池化层的作用,因为大部分的卷积层的步长都是大于1而又小于卷积核大小的,也就是滑动时是有重叠的,而池化层一般不是重叠的。也就是说这些层越多,越深,池化核或卷积核越大,空间不变性也越强;但是随之而来的问题是局部信息丢失,所以这些层越多准确率肯定是下降的,所以主流的CNN分类网络一般都很深,但是池化核都比较小,比如2×2。 比如ResNet,GoogLeNet,VGG,FCN,这些网络的总降采样比例一般是 16或32,基本没有见过 64倍,128倍或者更高倍数的降采样(会损失局部信息降低准确率),也很少见到 2倍或者4倍的降采样比例(空间不变性太弱,泛化能力不好)。不过这个是跟数据集中的图像大小有关的

《游戏程序设计模式》 2.1

亡梦爱人 提交于 2020-01-07 16:40:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> intent 使一系列顺序操作瞬时或同步出现。 motivation 在他们心中,计算机是顺序野兽。它的力量来源于把大的工作分成很多个小步骤一个接一个的执行。尽管一般是,我们的用户看到的是一个单一瞬时的任务或多任务同时执行。 一个经典的例子,而且是每个游戏引擎都会涉及的是渲染。当游戏绘制世界时,它一次要做这么一件事-远处的的山,起伏的坡,树木,这些个轮流。如果玩家看到以增量方式绘制画面,那么连贯世界的景象会破裂掉。场景必须平滑而快速的更新,展示一连串完整的帧,每一帧都要立刻出现。 双缓冲可以解决这个问题,但是要理解如何解决,我们要先回顾计算机如何显示图形。 how computer graphics work(briefly) 像计算机显示器显示图像是一次只能绘制一个像素。它从左到右横扫每一行然后移动到下一行。当它到达右下角之后,它又回到左上角重复之前的动作。它做得很快-大约一秒60次-以至于我们的眼睛看不到这个扫描过程。对我们来说,它就成了一个彩色像素的静态区域-一张图片。 你可以想象成用一个水管把像素射到屏幕。不同的像素从水管后部进入,然后水管把它们喷射到屏幕。那么,水管如何知道一个像素应该被射到哪里? 在多数计算机中,答案是水管从一个帧缓冲中取得像素。一个帧缓冲是内存中的一个数组用来存储像素的,一块RAM

STN-Spatial Transformer Networks-论文笔记

寵の児 提交于 2020-01-06 07:47:41
原文链接: https://arleyzhang.github.io/articles/7c7952f0/ 论文地址: https://arxiv.org/abs/1506.02025 1 简介 1.2 问题提出 CNN在图像分类中取得了显著的成效,主要是得益于 CNN 的深层结构具有 空间不变性(spatially invariance)(平移不变性,旋转不变性),所以图像上的目标物体就算是做了平移或者旋转,CNN仍然能够准确的识别出来,这对于CNN的泛化能力是有益的。 空间不变性主要是由于 Pooling 层 和 步长不为1的卷积层 的存在带来的。实际上主要是池化层的作用,因为大部分的卷积层的步长都是大于1而又小于卷积核大小的,也就是滑动时是有重叠的,而池化层一般不是重叠的。也就是说这些层越多,越深,池化核或卷积核越大,空间不变性也越强;但是随之而来的问题是局部信息丢失,所以这些层越多准确率肯定是下降的,所以主流的CNN分类网络一般都很深,但是池化核都比较小,比如2×2。 比如ResNet,GoogLeNet,VGG,FCN,这些网络的总降采样比例一般是 16或32,基本没有见过 64倍,128倍或者更高倍数的降采样(会损失局部信息降低准确率),也很少见到 2倍或者4倍的降采样比例(空间不变性太弱,泛化能力不好)。不过这个是跟数据集中的图像大小有关的

Python综合应用:教你用字符打印一张怀旧风格的照片

你。 提交于 2020-01-02 21:40:30
1. 前言 第一次在学校机房里见到计算机,还是上古时期。计算机型号大概是LASER-310吧,有点记不清了。那会儿,显示器还是单色的,只能显示文本,每行最多显示80个字符。想看图片,印象中只能用针式打印机打印在两侧穿孔的宽行打印纸上,每个像素用一个字符表示,不同的字符代表不同的灰度,就像下图这个样子。有没有感觉到浓郁古风呢?其实,随便一张照片,十几行Python代码,你也可以打印出这样的效果,还可以保存成文件。下面,我就一步一步地演示一下。 2. 打开图片,转为灰度模式 Python用于图像处理的模块有很多,最常用的当属PIL和PyOpenCV了。本案使用PIL模块来打开图像: 1 >>> from PIL import Image 2 >>> im = Image.open('xufive.jpg') 3 >>> im.size 4 (979, 1248) 5 >>> im.mode 6 'RGB' im就是打开的图像对象,im.size是图像的分辨率,im.mode是图像模式。我们知道,计算机图像有很多种颜色模式,RGB是最常见的彩色图像模式。打印字符图片的话,需要将RGB模式转为灰度模式: 1 >>> im = im.convert('L') 2 >>> im.mode 3 'L' 3. 改变分辨率 打印字符图片,需要考虑显示器每行显示的字符个数。假定屏幕水平分辨率为1920

永兴的笔记-OpenCV-7图像直方图 1 基本介绍

独自空忆成欢 提交于 2020-01-02 19:40:37
一、什么是图像直方图: 直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。 图像直方图是数值数据分布的精确图形表示。 颜色直方图: 颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。 灰度直方图(我们使用比较多的): 简单来说就是统计各个像素值的个数。比如说一幅灰度图中像素值中像素值为88的有多少个,像素值为66的有多少个像素点。 二、为什么要使用直方图: 图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类。 为什么说直方图计算代价较小? 例如一个1024x1024的图像,当转换成直方图时会进行其分组,列如分为255组,那么这1024x124个像素会被叠加分到这255组中去,即处理起虽然值变大了,但是像素点变少了,不需要去拆分rgb(hsv除外)三色,不需要单步计算等额外的工作,只需要通过特定的算法对这255组进行计算即可,所以说代价是较小的! 颜色直方图的意义如下:   ●

手把手教你图片转ASCII码图

橙三吉。 提交于 2020-01-01 23:50:53
效果图 基本思路 把图片每个像素点的信息拿出来,最重要的是拿到rgb的值 把每个像素点由rgb转成灰度图像,即0-255 给0-255分级,把每个等级的像素点转换成ascii码,完成 实现 第一步:获取像素信息 经查阅,使用canvas的getImageData方法可完成此要求,如下 <canvas id="canvas"></canvas> <script> var canvas=document.getElementById("canvas"); var context=canvas.getContext("2d"); canvas.width=800; canvas.height=800; context.rect(0,0,800,800); context.fillStyle="red"; context.fill(); console.log(context.getImageData(0,0,800,800)) </script> 上述代码指在canvas中铺满背景色为red,同时用getImageData()方法输出整个画布800*800的每个像素点。在控制台我们可以看到console的结果: 我们看到长度为2560000,而我们的宽*高才640000,这是怎么回事,难道不是一个像素点对应getImageData()中的一位?我们把2560000/640000

永兴的笔记-OpenCV-6图像梯度和边缘检测

。_饼干妹妹 提交于 2020-01-01 15:15:48
一、什么是图像梯度: 图像的梯度就是描述图像中灰度的变化,微积分就是求函数的变化率,即导数(梯度)。图像的梯度相当于2个相邻像素之间的差值。 图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导: 在x方向,选取某个像素,假设其像素值是100,沿x方向的相邻像素分别是90,90,90,则根据上面的计算其x方向梯度分别是10,0,0。这里只取变化率的绝对值,表明变化的大小即可。 灰度值100和90之间亮度相差10,并不是很明显,与一大群90的连续灰度值在一起,轮廓必然是模糊的。我们注意到,如果相邻像素灰度值有变化,那么梯度就有值,如果相邻像素灰度值没有变化,那么梯度就为0。如果我们把梯度值与对应的像素相加,那么灰度值没有变化的,像素值不变,而有梯度值的,灰度值变大了,那么图像的边缘更加明显。 二、OpenCV中的图像梯度应用(检测边缘): OpenCV提供三种类型的梯度滤波器或高通滤波器,Sobel,Scharr和Laplacian. 高通滤波器(英语:High-pass filter)是容许高频信号通过、但减弱(或减少)频率低于截止频率信号通过的滤波器。对于不同滤波器而言,每个频率的信号的减弱程度不同。它有时被称为低频剪切滤波器; 1、Sober 算子 Sober 算子是离散微分算子(discrete differentiation operator)

Opencv入门基础笔记02

这一生的挚爱 提交于 2020-01-01 13:12:46
Opencv入门基础笔记02:矩阵的掩模操作 我们都知道,图片是由一个个像素点组成的,那么,我理解为一个巨大的矩阵,而矩阵掩模,就是,自己定义了一个特定的矩阵“kernel”或者叫“mask”,即掩模,然后,进行对矩阵的叉乘,是卷积滤波的一种体现,然后使图片呈现自己想要的样子。 实际上,掩膜mask是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。在OpenCV中,掩模操作是相对简单的。大致的意思是,通过一个掩模矩阵,重新计算图像中的每一个像素值。掩模矩阵控制了旧图像当前位置以及周围位置像素对新图像当前位置像素值的影响力度。用数学术语讲,即我们自定义一个权重表。 1.用到的主要函数(filter2D,Mat,saturate_cast) 我们主要将掩模操作实现图片对比度的提高。用到的掩模为 Mat kern = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); 对应实际的数学计算公式为 I(i,j) = 5*I(i,j) - [I(i-1,j) + I(i+1,j) + I(i,j-1) + I(i,j+1)] 其中(i,j)是图片像素点坐标,I就是我们上面说的Kernel或者叫掩模mask

OpenCV学习笔记之三:图像基本操作

ぃ、小莉子 提交于 2020-01-01 05:01:52
首先,学习图像处理需要用到Python的两个库,在Pycharm的终端里安装以下两个库: 注意:安装特定版本的库时,在后面用==接要安装的版本号 pip install opencv-python==3.4.1.15 pip install opencv-contrib-python==3.4.1.15 计算机中一个像素点事从0-255表示亮度,255最亮表示白色,0表示黑色。RGB是三维数据矩阵表示一个图片的所有像素点组成。 图像-->500x500x3(3:RGB) 在每个颜色通道上都有1个500x500的矩阵。 一、 数据读取 - 图像 c v2.IMREAD_COLOR:彩色图像 img = cv2.imread(r'.\jay1.jpg') c v2.IMREAD_GRAYSCALE:灰度图像 img = cv2.imread('jay1.jpg',cv2.IMREAD_GRAYSCALE) #图像进行灰度处理,灰度图进行预处理操作 二、 数据读取-视频 cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。 如果是视频文件,直接指定好路径即可。 #视频显示 vc = cv2.VideoCapture('test.mp4') #参数是要读取的视频 #检查是否打开正确 if vc.isOpened(): oepn, frame = vc

线阵相机与面阵相机

拟墨画扇 提交于 2020-01-01 02:46:58
线阵相机   主要应用于工业、医疗、科研与安全领域的图象处理。 在机器视觉领域中,线阵相机是一类特殊的视觉机器。与面阵相机相比,它的传感器只有一行感光元素,因此使高扫描频率和高分辨率成为可能。线阵相机的典型应用领域是检测连续的材料,例如金属、塑料、纸和纤维等。被检测的物体通常匀速运动 , 利用一台或多台相机对其逐行连续扫描 , 以达到对其整个表面均匀检测。可以对其图象一行一行进行处理 , 或者对由多行组成的面阵图象进行处理。另外线阵相机非常适合测量场合,这要归功于传感器的高分辨率 , 它可以准确测量到微米。   1,线阵相机,机顾名思义是呈“线”状的。虽然也是二维图象,但极长,几K的长度,而宽度却只有几个象素的而已。一般上只在两种情况下使用这种相机:一、被测视野为细长的带状,多用于滚筒上检测的问题。二、需要极大的视野或极高的精度。   2,在第二种情况下(需要极大的视野或极高的精度),就需要用激发装置多次激发相机,进行多次拍照,再将所拍下的多幅“条”形图象,合并成一张巨大的图。因此,用线阵型相机,必须用可以支持线阵型相机的采集卡。 线阵型相机价格贵,而且在大的视野或高的精度检测情况下,其检测速度也慢--一般相机的图象是 400K~1M,而合并后的图象有几个M这么大,速度自然就慢了。慢功出细活嘛。由于以上这两个原因,线阵相机只用在极特殊的情况下。   面阵相机