<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[天律界中子之不写博客不读书]]></title><description><![CDATA[愿我的墓志铭如是：三分匠心，三分圣贤，两分侠义，两分柔情。]]></description><link>https://blog.youkuaiyun.com/u012494876</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u012494876]]></copyright><item><title><![CDATA[基于快速去雾的图像亮度增强方法]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80637323</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80637323</guid><author>u012494876</author><pubDate>Sat, 09 Jun 2018 23:08:30 +0800</pubDate><description><![CDATA[起因

最近在做一个图像处理的算法，因为图像太暗，所以需要对图像的亮度进行增强(不考虑噪声的放大)。尝试了网上搜索到的各种方法后，发现它们存在两个问题：容易造成原本较亮的地方过曝，并且参数不好设置。尝试了一些暗光增强的paper的算法后，发现它们又太慢了。这时我想到曾经看过的一篇paper说过，有一种亮度增强的算法是基于去雾来做的，步骤很简单： 
1. 将RGB图像取反(关于图像取反，请参考我的这...]]></description><category></category></item><item><title><![CDATA[OpenCV两个Mat相减的隐藏秘密]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80629474</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80629474</guid><author>u012494876</author><pubDate>Sat, 09 Jun 2018 00:06:20 +0800</pubDate><description><![CDATA[起因

今天在看同事写的代码时，发现一个“错误”： 
他的原意是实现以下功能：



cv::Mat absDiff;
cv::absdiff(mat1, mat2, absDiff);

其中mat1和mat2均为CV_8UC1类型。

但是可能是一时没想起这个函数，于是他写成了这个样子：



cv::Mat absDiff = cv::abs(mat1 - mat2);



问题

于是我...]]></description><category></category></item><item><title><![CDATA[OpenCL优化小技巧：预创建所有Kernel]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80617200</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80617200</guid><author>u012494876</author><pubDate>Fri, 08 Jun 2018 00:13:57 +0800</pubDate><description><![CDATA[最近做了一些图像处理的算法，跑在高通的开发板上，其中使用了OpenCL进行加速。在此过程中，也总结了几个加速的小技巧。今天就来谈其中一个不太有用的小技巧：预创建所有Kernel。

第一次进行OpenCL加速时，我注意到，创建cl_kernel时，会耗费几毫秒到二十几毫秒的时间。如果算法中需要创建几十个cl_kernel，那花费的时间也有几百毫秒了。这让人很难接受。

后来我又注意到，对于同一个K...]]></description><category></category></item><item><title><![CDATA[OpenCL clCreateBuffer占用太多时间]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80616819</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80616819</guid><author>u012494876</author><pubDate>Thu, 07 Jun 2018 23:43:00 +0800</pubDate><description><![CDATA[最近在做一个图像处理的算法，跑在高通平台上，需要使用OpenCL加速。代码分为三个部分： 
1. 初始化 
2. 处理图像 
3. 释放资源

为了尽可能地减少算法的运行时间，我将一切可以预处理的内容都放到了初始化中，其中就包括了创建buffer。在初始化中，我调用clCreateBuffer()创建了9个buffer，共计约占用600MB内存。然后在处理图像中重复使用这些buffer，最后在释放...]]></description><category></category></item><item><title><![CDATA[OpenCV图像取反]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80616442</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80616442</guid><author>u012494876</author><pubDate>Thu, 07 Jun 2018 22:55:06 +0800</pubDate><description><![CDATA[最近在做一个基于去雾的图像亮度增强的算法IBEABFHR，其中用到了图像取反的操作。所谓图像取反，就是将RGB图像的每个像素点(r, g, b)，使用(255 - r, 255 - g, 255 - b)替换。对于灰度图像而言，则是将(g)使用(255 - g)替换。 
如下图所示： 
 
RGB图像 
 
RGB取反图像 
 
灰度图像 
 
灰度取反图像

在OpenCV中要实现此操作，可以遍...]]></description><category></category></item><item><title><![CDATA[提取图像细节的两种方法]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80588823</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80588823</guid><author>u012494876</author><pubDate>Tue, 05 Jun 2018 23:23:40 +0800</pubDate><description><![CDATA[一幅图像可以分解为两层：底层(base layer)和细节层(detail layer)。底层包含图像的低频信息，反映了图像在大尺度上的强度变化；细节层包含图像的高频信息，反映了图像在小尺度上的细节。分解图像有两种方式，以下分别进行解释。



1. 加性分解

要获取图像的底层，即图像的低频信息，使用低通滤波(如均值滤波(mean filter)，高斯滤波(gaussian filter)，导向...]]></description><category></category></item><item><title><![CDATA[C++11高精度计时器]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/80588786</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/80588786</guid><author>u012494876</author><pubDate>Tue, 05 Jun 2018 23:19:04 +0800</pubDate><description><![CDATA[做图像处理算法时，免不了要测量函数的运行时间。以前我都是使用OpenCV的计时函数cv::getTickCount()和cv::getTickFrequency()，但是这样一来，在不使用OpenCV的项目中就没法用了。幸好C++11增加了std::chrono库，可以很方便地实现跨平台的时间测量。于是我封装了一个简单的计时器类，这样只要将其简单地添加到项目中，就可以直接使用了。此计时器单位为毫秒...]]></description><category></category></item><item><title><![CDATA[OpenCV之直方图均衡化]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/78068423</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/78068423</guid><author>u012494876</author><pubDate>Sat, 23 Sep 2017 07:51:28 +0800</pubDate><description><![CDATA[本文代码使用OpenCV版本：2.4.13
  本文代码在Win10+Visual Studio 2013 Update 3下测试通过
  
上两篇博客《OpenCV之直方图拉伸》和《OpenCV之查找表与直方图拉伸》讲述了拉伸图像的直方图以增强对比度。然而，在多数情况下，图像在视觉上的缺陷并非源于使用过窄的强度范围，而是由于某些颜色值出现的频率高于另一些。事实上，我们可以认为一幅高质量的图像应该平]]></description><category></category></item><item><title><![CDATA[OpenCV之查找表与直方图拉伸]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/78002019</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/78002019</guid><author>u012494876</author><pubDate>Sat, 16 Sep 2017 10:59:39 +0800</pubDate><description><![CDATA[本文代码使用OpenCV版本：2.4.13
  本文代码在Win10+Visual Studio 2013 Update 3下测试通过
  
上一篇博客《OpenCV之直方图拉伸》讲述了直方图拉伸的原理及实现，其中得到了如下公式：g=⎧⎩⎨⎪⎪0,(g−grayMin)∗255(grayMax−grayMin),255,if g<grayMinif grayMin≤g≤grayMaxif g>gra]]></description><category></category></item><item><title><![CDATA[OpenCV之直方图拉伸]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/77998352</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/77998352</guid><author>u012494876</author><pubDate>Sat, 16 Sep 2017 06:49:07 +0800</pubDate><description><![CDATA[本文代码使用OpenCV版本：2.4.13
  本文代码在Win10+Visual Studio 2013 Update 3下测试通过
  
上一个博客《OpenCV之图像直方图计算》讲述了图像直方图的计算。计算出图像的直方图后，我们不仅可以据此观察图像的像素分布情况，还可以利用它对图像进行增强，例如直方图拉伸(Histogram Stretching)。比如，我们有一个灰度图像的直方图如下所示：可]]></description><category></category></item><item><title><![CDATA[OpenCV之图像直方图计算]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/77971377</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/77971377</guid><author>u012494876</author><pubDate>Wed, 13 Sep 2017 21:35:34 +0800</pubDate><description><![CDATA[注：本文使用OpenCV版本：2.4.13
calcHistOpenCV提供了计算图像直方图的接口calcHist：void calcHist(const Mat* images, 
    int nimages, 
    const int* channels, 
    InputArray mask, 
    OutputArray hist, 
    int dims, 
    c]]></description><category></category></item><item><title><![CDATA[作者声明]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/77950225</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/77950225</guid><author>u012494876</author><pubDate>Tue, 12 Sep 2017 21:51:57 +0800</pubDate><description><![CDATA[作者：天律界中子
邮箱：279428101@qq.com
优快云博客地址：http://blog.youkuaiyun.com/u012494876
版权声明：转载请保留此链接，不得用于商业用途。]]></description><category></category></item><item><title><![CDATA[希腊字母表]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/76560300</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/76560300</guid><author>u012494876</author><pubDate>Tue, 01 Aug 2017 22:28:09 +0800</pubDate><description><![CDATA[序号
  大写
  小写
  英文注音
  中文读音  1
  AA
  α\alpha
  alpha
  阿尔法
  2
  BB
  β\beta
  beta
  贝塔
  3
  Γ\Gamma
  γ\gamma
  gamma
  伽马
  4
  Δ\Delta
  δ\delta
  delta
  德尔塔
  5
  EE
  ϵ\epsilon
  epsilon
  伊普西龙]]></description><category></category></item><item><title><![CDATA[new的初始化]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/76222682</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/76222682</guid><author>u012494876</author><pubDate>Thu, 27 Jul 2017 22:32:37 +0800</pubDate><description><![CDATA[有如下C++代码：int* buffer = new int[512];在默认情况下，new是不会对分配的int进行初始化的。要想使分配的int初始化为0，需要显式地调用其初始化函数：int* buffer = new int(); // 分配的一个int初始化为0
int* buffer = new int[512](); // 分配的512个int都初始化为0对于单个int，也可以初始化为非0值]]></description><category></category></item><item><title><![CDATA[malloc()与calloc()的区别]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/76218054</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/76218054</guid><author>u012494876</author><pubDate>Thu, 27 Jul 2017 19:45:53 +0800</pubDate><description><![CDATA[malloc()和calloc()都可以在堆上分配内存，分配的内存也都用free()进行释放，它们的函数原型如下：void* malloc(size_t _Size);void* calloc(size_t _Count, size_t _Size);它们的主要区别是：malloc()只分配内存，calloc()除了分配内存外，还将分配的内存清空为0。举例来说，下面的两段代码是等价的：// mall]]></description><category></category></item><item><title><![CDATA[C++11之初始化列表]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/73355158</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/73355158</guid><author>u012494876</author><pubDate>Fri, 16 Jun 2017 22:37:45 +0800</pubDate><description><![CDATA[C++11引入了一项新功能：初始化列表。在C++98中，我们可以使用以下两种方法进行初始化：int i = 0;
int j(0);引入“初始化列表”后，我们可以这样进行初始化：int i = {0};
int j{0};上述代码体现不出“初始化列表”的优越来，别着急，我们还可以这样用：std::vector<int> v{ 1, 2, 3, 4 };
std::map<int, float> m]]></description><category></category></item><item><title><![CDATA[OpenGL由FOVY计算FOVX]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/70833624</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/70833624</guid><author>u012494876</author><pubDate>Wed, 26 Apr 2017 23:11:36 +0800</pubDate><description><![CDATA[在项目中遇到这样一个问题：已知摄像机垂直方向的FOV为FOVY，摄像机与近裁剪平面的距离为n，裁剪平面的宽高比为aspect，求摄像机水平方向的FOVFOVX。设近裁剪平面窗口的宽度为w，高度为h，则：tan(FOVY / 2) = h / (2n);
tan(FOVX / 2) = w / (2n) = aspect * h / (2n) = aspect * tan(FOVY / 2);于是可以]]></description><category></category></item><item><title><![CDATA[.obj文件中顶点数据的合并]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/70767734</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/70767734</guid><author>u012494876</author><pubDate>Tue, 25 Apr 2017 21:46:28 +0800</pubDate><description><![CDATA[在OpenGL中，为了减少顶点数据所占用的内存，通常会合并具有相同属性的顶点，然后使用顶点的索引进行绘制。举例来说，对于xz平面上中心在原点的的单位正方形，需要两个三角形来表示它，于是一共需要六个顶点：// 第一个三角形
v1: 位置vec3(-0.5,  0.0,  0.5)，纹理坐标(0.0, 0.0)，法向量(0.0, 1.0, 0.0)
v2: 位置vec3( 0.5,  0.0,  0.5]]></description><category></category></item><item><title><![CDATA[CGAL配置后使用时遇到的一些问题及解决方法]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/55051114</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/55051114</guid><author>u012494876</author><pubDate>Mon, 13 Feb 2017 18:02:48 +0800</pubDate><description><![CDATA[配置CGAL无需赘述，按照官网的教程一步步来即可。 
配置完成后，我们可能会需要创建一个自己的项目，来使用CGAL。 
假设我们使用Visual Studio创建一个最简单的项目，里面仅包含一个main.cpp文件：#include "CGAL/Polyhedron_3.h"int main()
{
    return 0;
}明显地，我们需要将F:\OpenSource\CGAL-4.9\inc]]></description><category></category></item><item><title><![CDATA[OpenGL清理缓存的两种方法]]></title><link>https://blog.youkuaiyun.com/u012494876/article/details/54385557</link><guid>https://blog.youkuaiyun.com/u012494876/article/details/54385557</guid><author>u012494876</author><pubDate>Thu, 12 Jan 2017 23:04:57 +0800</pubDate><description><![CDATA[在OpenGL中，对每一帧进行渲染前，我们可能会需要清理帧缓存中的旧数据，包括颜色缓存、深度缓存和模板缓存。通常来说，我们会使用以下方法：
初始化时，调用glClearColor()、glClearDepth()及glClearStencil()分别设置清空后颜色缓存、深度缓存和模板缓存中的默认值；
在每一帧渲染前，调用glClear()并传入GL_COLOR_BUFFER_BIT、GL_DEPTH]]></description><category></category></item></channel></rss>