图像处理

unity 仿ue4湖水效果

这次是做个测试,看看材质通用性 为了方便使用的是untiy 5.6 + shaderforge 1.38 下面是最后的效果(当然比起ue4里面还添加了一些,用的线性空间和deferred模式) 下面是ue4原本的 因为主要是法线上的效果,unity在法线和光照效果上还是差挺多的 连节点中还发现深度信息和ue4略有不同这个要注意 而且在测试中还发现了shaderforge的bug 当然depth相关节点最终连接到normal节点的话会报下面的错 Shader error in ‘Shader Forge/test’: undeclared identifier ‘partZ’ at line 106 (on d3d11) 但是只需要改源码,把partZ声明放在使用之前就可以了 下面是第一个版本的shaderforge节点 基本和ue4那个很像,需要注意的是某些节点虽然和ue4很像,但是略有不同 预览是错误,因为需要改源码,但每次改过后,shaderforge打开又会开回来 这个bug其实挺多见的,节点连多了,各种bug就出现了 效果如下 但是这个缺少放入物体虚化的效果,于是又改了下 效果就是第一幅图的了,注意这个需要开启透明,使用的时候只能是不透明的物体放入水中,否则会有深度问题 节点如下 预览也是这个问题,shader文件里直接改 放上改好的shader下载地址(注意只有shader文件) http://download.csdn.net/download/shenmifangke/9991699

图像处理实例–图像去噪

常见的噪声种类 数字图像在获取、传输的过程中都可能会受到噪声的污染,常见的噪声主要有高斯噪声和椒盐噪声。其中,高斯噪声主要是由摄像机传感器元器件内部产生的,椒盐噪声主要是由图像切割所产生的黑白相间的亮暗点噪声,“椒”表示黑色噪声,“盐”表示白色噪声。 f=imread('3.jpg'); g=imnoise(f,'salt & pepper',0.06); h=imnoise(f,'gaussian',0.05,0.05); subplot(1, 3, 1), imshow(f), title('原图'); subplot(1, 3, 2), imshow(g), title('椒盐'); subplot(1, 3, 3), imshow(h), title('高斯'); 去噪方法 空域 空域图像去噪用的有均值滤波算法和中值滤波算法,主要是对图像像素做邻域的运算来达到去噪结果。 g1 = imfilter(g, fspecial('average')); g2 = medfilt2(g, [5 5]); subplot(2, 2, 3), imshow(g1), title('均值滤波'); subplot(2, 2, 4), imshow(g2), title('中值滤波'); 形态学去噪 数学形态学图像处理通过采用具有一定形态的结构元素去度量和提取图像中的对应形状,借助于集合理论来达到对图像进行分析和识别的目标,该算法具有以下特征。 1、图像信息的保持 在图像形态学处理中,可以通过已有目标的几何特征信息来选择基于形态学的形态滤波器,这样在进行处理时既可以有效地进行滤波,又可以保持图像中的原有信息。 2、图像边缘的提取 基于数学形态学的理论进行处理,可以在一定程度上避免噪声的干扰,相对于微分算子的技术而言具有较高的稳定性。形态学技术提取的边缘也比较光滑,更能体现细节信息。 3、图像骨架的提取 基于数学形态学进行骨架提取,可以充分利用集合运算的优点,避免出现大量的断点,骨架也较为连续。 4、图像处理的效率 基于数学形态学进行图像处理,可以方便地应用并行处理的技术来进行集合运算,具有效率高、易于硬件实现的特点。 权重自适应的多结构形态学去噪 在数学形态学图像去噪的过程中,通过适当地选取结构元素的形状和维数可以提高滤波去噪的效果。在多结构元素的级联过程中,需要考虑到结构元素的形状和维数。数字图像在进行数学形态滤波去噪时,根据噪声特点可以尝试采用维数由小到大的结构元素来进行处理,进而达到滤除不同噪声的目的。采用数学形态学的多结构元素,可以更多地保持数字图像的几何特征。因此,选择构建串联滤波器来进行图像滤波,就是将同一形状的结构元素按维数从小到大的顺序来对图像进行滤波。 >> i=imread('food.jpg'); >> i=rgb2gray(i); >> %添加噪声 >> ig=imnoise(i,'poisson'); >> %获取算子 >> s=GetStrelList(); >> %串联去噪 >> edit erodeList >> e=erodeList(ig,s); >> edit getRateList >> %计算权重 >> f=getRateList(ig,e); >> edit getRemoveResult >> %并联 >> igo=getRemoveResult(f,e); >> %显示结果 >> subplot(1,2,1),imshow(f); >> subplot(1,2,1),imshow(i); >> title('原图像'); >> subplot(1,2,2),imshow(ig),title('噪声图像'); >> figure; >> subplot(2,2,1),imshow(e.

【3dsmax】物体冻结与半透明显示

如果photoshop的图层一样,在平时的3dsmax设计的时候,会遭遇到物体繁多的情况,类似于photoshop需要隐藏图层一样,3dsmax也需要冻结物体,让我们的设计和编程更加高效。右键点击要隐藏的物体,然后选择Object Properties,然后点选Freeze,并且去掉勾选Show Frozen in Gray。冻结物体并且让其正常显示。虽然右键菜单直接就有Freeze Selection选项,但这样会使物体变灰。 同时要想到,如果发现物体无法选择和移动,考虑到物体是否被冻结。 如果不想冻结物体,还可以用Alt+X来变透明显示物体,从而更好地看出物体之间的交错关系。这样只是改变在编辑时候的显示效果,渲染的时候不受影响。

图像处理基础

第一章 数字图像基本知识 1、 彩色图像、灰度图像、二值图像和索引图像区别? 答:(1)彩色图像,每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像,当然也可以存放灰度图像。 (2)灰度图像(gray image)是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。 (3)二值图像(binary image),即一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,计算机存储的二值化图像用0和255来表示。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。 (4)索引图像是为了减少RGB真彩色存储容量而提出的,它的实际像素点和灰度图一样用二维数组存储,只不过灰度值的意义在于表示颜色表索引位置;而颜色表是指颜色索引矩阵MAP,MAP的大小由存放图像的矩阵元素值域决定,如矩阵元素值域为[0,255],则MAP矩阵的大小为256×3,MAP中每一行的三个元素分别指定该行对应颜色的红、绿、蓝单色值。 如某一像素的灰度值为64,则该像素的颜色值就是MAP中的第64行的RGB组合。也就是说,图像在屏幕上显示时,每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵MAP得到。索引图像一般用于存放色彩要求比较简单的图像,如Windows中色彩构成比较简单的壁纸多采用索引图像存放,如果图像的色彩比较复杂,就要用到RGB真彩色图像。 2、奈奎斯特采样定理 答:奈奎斯特采样定理解释了采样率和所测信号频率之间的关系,即采样率fs必须大于被测信号最高频率分量fmax的两倍,fmax频率通常被称为奈奎斯特频率,公式: fs>2*fmax; 至于奈奎斯特采样定理成立的原因,可见下图: 第二章 图像增强 1、图像增强包括哪些? 答:(1)图像增强主要分为空间域增强方法和频域增强方法。 空间域就是指图像本身,频域指图像经过傅里叶变换的信号; (2)空间域图像增强操作很多: 灰度变换:如二值化、图像反转(255-grayValue)、对数变换(增大像素的灰度值,尤其对源图的暗像素效果明显,参见对数曲线)、反对数变换(减小像素灰度值,尤其对亮像素效果明显,参见反对数曲线)、幂次变换(又叫伽马校正,其可以增大或减少像素灰度值,具有变换程度与指数γ大小有关,参见幂函数曲线)、分段线性函数变换(包括对比拉伸、灰度切割、位图切割); 直方图处理(直方图均衡化、直方图局部增强); 算数逻辑操作增强(图像减法处理、图像平均处理); 平滑滤波、线性滤波、统计排序滤波、均值滤波、中值滤波等滤波; 锐化处理(拉普拉斯算子锐化、梯度法锐化); 等等,都是空间域图像增强方法。 2、灰度直方图 答:灰度直方图是横坐标为灰度级、纵坐标为像素个数的直方图,用于表示每个灰度范围内的像素个数; 归一化灰度直方图:将灰度直方图的纵坐标值除以像素总数,产生的新直方图即是。 3、直方图均衡化与应用 答:(1)直方图均衡化:就是通过变换函数,使得图像的灰度分布较为均匀,将灰度值集中的部分均匀分散到整个灰度范围,使得直方图的各个灰度级y轴较为平坦。从而实现图像增强,如较暗的图片变得较为明亮,过亮的图片变的正常,从而利于观察识别。 (2)均衡化的变换函数:就是一个映射函数,必须满足两个条件:1)一个单值单增函数;2)映射后灰度范围不变。实际中常用累积分布函数。累积分布函数如下定义: ①先求当前灰度级的累计概率(即当前灰度级以及小于当前灰度级的像素个数和在图像中的比例): Sk是当前像素值的累计概率,k是当前像素的像素值,n是图像中像素个数的总和,nj是当像素值等于j的像素个数,L是图像中可能的灰度级总数。 ②求当前像素的映射像素值: 映射函数g=最大灰度值*Sk;(例如最大灰度值为255,则g=255*Sk) (3)缺点: 1)变换后图像的灰度级减少,某些细节消失; 2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。 (4)应用:改善光线对图像处理的影响。成像中由于光照过大或过小,会造成图像结果偏暗或偏亮或者光线不均匀,这样图像直方图就会表现:灰度的两个高峰分别向某一边滑动,同时灰度值都较为集中,不能真实反应目标图像的特征。所以使用直方图均衡化可以减少这种影响。 (5)直方图均衡化步骤: ①找到一个映射函数,定义为g = EQ (f)。f完整表示是f(x,y),代表图像中某个位置的像素值; ②依次使用EQ将图像中每个位置的像素值映射为新的像素值。 4、直方图匹配(或直方图规定化) 答:直方图匹配是指将一个图像的直方图变换到指定的形状(直方图均衡化是变换到均匀分布),是一种图像增强技术; 5、直方图局部增强 答:前述直方图处理都是直接对整幅图像求直方图,然后针对直方图处理。而直方图局部增强则是对图像的每个指定大小区域分别求直方图,然后针对每个直方图进行均衡化或者规定化处理。 例如,用一个k*k的矩阵从图像左上角滑动,每滑动一次计算一次该矩阵范围内图像的直方图,进行相关直方图处理。直到整幅图都被滑过,就实现了局部增强操作。 作用:可以实现对图像细节的增强。 6、算术/逻辑操作增强 答:主要包括与、或、加、减法操作。 图像相减法:应用最为成功的是医学领域的掩模式X射线成像术,另外图像相减法在图像分割中也有应用; 7、空间滤波基础概念 答:(1)掩模:在滤波器中常提到的k*k的矩阵(一般k为奇数),用于依次滑过每一像素点并在每点进行滤波计算,矩阵中的数据成为掩模系数。 滤波器在每个像素点的滤波结果就是掩模与掩模覆盖下的图像进行计算得到的结果;如线性滤波器就是掩模系数与覆盖下的对应图像像素点进行乘法操作,最后求和得到的结果。 (2)邻域处理:上述线性滤波器就属于邻域处理滤波器,因为其将本像素点为中心的邻域像素都纳入计算中了;实际非线性滤波器也是邻域处理方式,如常见的非线性滤波器:中值滤波器。 (3)如何解决图像边缘掩模滤波问题:掩模移动都是以矩阵中心作为基准点的,那么对于图像边缘,掩模矩阵就会有一部分超出图像范围。一般解决方法有: 1)限制掩模移动范围,使得掩模始终在图像范围内。缺点是边缘部分像素得不到滤波处理; 2)使用灰度值0或者边缘灰度值扩充边缘,滤波后删除。缺点是影响靠近边缘像素的滤波结果; 3)掩模超出部分不参与滤波计算; 三种方式中1)是最佳选择。 8、平滑线性滤波器 答:常见的线性滤波器有:均值、加权均值滤波器等。

lens shading correction

lens shading分为两种luma shading(亮度阴影)和color shading(色彩偏差)。 luma shading产生的原因是镜头的通光量从中心到边角依次较少,导致图像看起来,中间亮度正常,四周偏暗。 采用网格矫正的方法: 1、获取矫正系数 拍一张均匀亮度的图像,将图像分成n*m个格子,每个格子的四个点都有一个校正系数,将n*m个校正系数存入表中。 2、计算待矫正像素点所在网格四个顶点的校正系数 根据待校正像素的坐标,计算该点落在哪一个网格中,求得网格的编号,再求得该网格四个顶点的编号,通过查表,求得网格四个顶点的校正值。 3、计算待矫正像素的校正值 通过双线性插值,由网格的四个顶点计算出待矫正像素的校正值。 4、矫正 将当前像素值乘以校正系数。

扁平化立体字教程

首先看看最终效果图 有点类似于扁平化的风格,但立体的感觉却更加明显,虽然看起来不难做,但实际操作的时候却会发现不少的问题,这里不仅涉及到了构图,也涉及到了有关色彩灰度与色彩明暗的问题,而且网络上这类设计的教程并未出现多少,废话不多说,接下来就是主题部分 首先用最通俗最明了的东西来告诉你什么是色彩明度与色彩灰度 是不是很明了,如果再看不明白建议去看看ps的新手教程 1.创建画布, 2.设置参考线与网格,这里是为了设置世界坐标轴 3.制作世界坐标轴 使用钢笔工具连接对角的点 4.再将其拷贝一层后逆时针60度 5.将最初设置的网格去除,开始绘制字母 6.这里需要思考字母结构与立方体的结构,已经如何去搭配,主要的的思路是在一条直线的会在一个面内,使用不同灰度来制作内部的结构,亮度提升后制作顶部 7.然后同样的方法来制作剩下的字 完结撒花,dwt,当然就是我了,看完后相信大家对此类设计都有了一定的了解 后面会继续更新更多的教程,谢谢观赏~~

洛谷OJ – P1347 排序(拓扑排序)

题目描述: 一个不同的值的升序排序数列指的是一个从左到右元素依次增大的序列,例如,一个有序的数列A,B,C,D 表示A 输入输出格式 输入格式: 第一行有两个整数n,m,n表示需要排序的元素数量,2<=n<=26,第1到n个元素将用大写的A,B,C,D….表示。m表示将给出的形如A 接下来有m行,每行有3个字符,分别为一个大写字母,一个<符号,一个大写字母,表示两个元素之间的关系。 输出格式: 若根据前x个关系即可确定这n个元素的顺序yyy..y(如ABC),输出 Sorted sequence determined after xxx relations: yyy…y. 若根据前x个关系即发现存在矛盾(如A Inconsistency found after 2 relations. 若根据这m个关系无法确定这n个元素的顺序,输出 Sorted sequence cannot be determined. (提示:确定n个元素的顺序后即可结束程序,可以不用考虑确定顺序之后出现矛盾的情况) 输入输出样例 输入样例#1: 1: 4 6 A 输出样例#1: 1: Sorted sequence determined after 4 relations: ABCD. 2: Inconsistency found after 2 relations. 3: Sorted sequence cannot be determined. 题目思路: 每输入一条边进行一定判断,首先判断是否存在环,然后判断是否所有的结点都已出现,如果结点都出现,并且无环,那么找到入度为0的结点开始深搜,如果能遍历输出拓扑排序后的结果。如果不能遍历完,说明所有的结点并没有全部连通。继续下一步。 题目代码: #include #include #include #include #include #include #include #define LL long long using namespace std; vector G[30]; int out[30], in[30]; int n, m, t, tot = 0; int exist[30], topo[30]; int vis[30]; string s; // 判断是否存在环 bool dfs(int x){ vis[x] = -1; for(int i = 0; i < G[x].

【图像处理】Tensorflow:简易超分辨重建与坑

超分辨重建是图像复原领域的一大热点,能在硬件有限的情况下最大还原原始场景的信号,在天文探索、显微成像等领域有重要作用。成像设备对物体成像时,由于距离较远,成像会模糊,可以类比多尺度高斯滤波;受限于成像机能,成像像素达不到最理想条件,可类比为对原始像进行一个下采样。超分辨重建就是要在这种条件下复原原始图像。 假设上帝有最好的成像设备,成像为X;我们成像设备成像为B,高斯滤波模板设为G;为了防止问题病态,加入lasso正则。那么有: argmin [subsampling(conv(X,G))−B]2+λX 现在的问题是,Tensorflow如何表示subsampling并进行优化? Tensorflow支持以下几种图像缩放/采样: tf.image.resize_images,支持最近邻、双线性、双三次等缩放方法 tf.nn.max_pool 最大值下采样 tf.nn.avg_pool 均值下采样 现在我们逐个测试一下。图像经过三倍下采样: 1、tf.image.resize_images,双线性采样,振铃不严重,条纹很多: 2、tf.nn.max_pool,没有条纹、振铃,但是有一堆噪声,参数调了几次都没有什么更好的效果: 3、tf.nn.avg_pool,无条纹、噪声,有振铃,与原图相比颜色变暗,对比度下降: 4、来与原图做个对比 可以看出,效果最好的就是avg_pool了,在只有高斯模板参数,完全没有其他先验信息的情况,一秒钟内得到这个结果,已经让人非常惊讶了。猜测image-resize和max_pool其实在上下采样中都丢失相当多的信号,而avg_pool则保留了最多的信号,因此重建效果较好。 fast-neural-style文章提到过用感知特征来对图像进行超分辨重建,可以重建同样风格的细节,这个需要用生成网络对大量的图像进行训练,或者直接上vgg慢慢地计算感知特征来仿制风格细节。

Stanford CS231n Lecture 1 计算机视觉历史回顾与课程大纲

本系列文章是斯坦福CS231n: Convolutional Neural Networks for Visual Recognition (winter 1516) 的听课笔记与课下补充资料。 计算机视觉历史回顾 这是一个视觉时代,目前(2016)有85%的网络信息是像素形式,它们难以被利用,李飞飞将它们称为“网络中的暗物质”。CS231n聚焦于神经网络这一模型和计算机视觉这一应用。 视觉大约在5.4亿年前出现,有人认为,视觉的出现导致并驱动了生物大爆发。 16世纪,达芬奇发明了照相暗盒,开始复制人们看到的信息。 1959年,Huber&Wiesel研究生物的大脑是如何处理视觉信息的。他们发现,大脑从简单的形状(例如,边缘)开始处理视觉信息。在视觉处理的第一步,基础视觉区的神经元按一列一列组织起来,每一列神经元只“喜欢”某一种特定的形状。 1963年,Larry Roberts认为是边缘决定了物体外形,他的博士论文Block World是现代CV先驱。 1966年,MIT的人工智能实验室成立,标志着CV的诞生。 20世纪70年代,David Marr提出了一个重要思想,“视觉是分层的”。这一思想被Deep Learning/CNN汲取。 20世纪90年代,进入彩色时代,问题转向“感知分组”(人看到世界时会在脑中自动分割出各物体,而不是觉得只是一堆像素),这一问题现在仍未彻底解决。 进入21世纪,问题焦点从3D建模变迁到识别问题。出现了第一个商用的CV算法(实时人脸检测),它的特征学习过程有很强的深度学习特质。此后又出现了SIFT, Deformable Part Model等。后来又出现了ImageNet和神经网络的复兴。 CS231n 课程大纲 CS321n聚焦于视觉识别中的一个重要问题,图像分类。视觉识别中有很多问题与图像分类相关,比如物体检测、图像说明。 CNN是物体识别的重要工具。2012年之前的ILSVRC冠军模型采用的是“特征+SVM”,没有端到端学习的风格特色。2012年,Hinton和他的学生引领了神经网络的复兴。到2015年的MSRA,采用的仍是CNN。 AlexNet的成功离不开大量数据和高性能GPU,AlexNet只在1998年LeNet上做了很少改动。 视觉识别远不止物体识别,还包括很多内容,比如对全场景中的物体都打上标签、深入理解一幅图像……

OpenCV实践(3)- 改变图像的对比度和亮度

1 目标 (1)访问像素值; (2)初始化矩阵为0; (3)学习saturate_cast做什么和它为什么有用? (4)Get some cool info about pixel transformations 2 理论 可以参考[计算机视觉:算法和应用](http://szeliski.org/Book/)一文。 3 图像处理 (1)图像处理运算就是一个函数把输入的一个或多个图像,转换为输出图像的过程; (2)图像变换可以被看成: a) 像素点的转换; b) 邻域的操作(基于域的概念); 4 像素变换 在这类转换中,每一个输出像素点仅仅依赖于相对应的输入像素点(潜在地附加一些收集的全面信息和参数)。 这类操作的例子有:亮度和对比度的调整,以及色彩校正和转换。 4.1 亮度和对比度调整 (1) 理论公式为 (2) 在这里, 和 被称为增益和偏差参数,有时候,也被认为分别控制对比度和亮度。 (3)你可以认为f(x)是输入图像的像素值,g(x)是输出图像的像素值。那么为了方便我们就可以把上面的公式写为: 在这里,i和j分别代表像素点在行和列的位置。 4.2 代码实现 #include #include #include using namespace cv; double alpha; /**< Simple contrast control */ int beta; /**< Simple brightness control */ int main( int argc, char** argv ) { /// Read image given by user Mat image = imread( argv[1] ); Mat new_image = Mat::zeros( image.