部分双摄手机支持夜间拍照的暗光增强技术,如华为P9的“超级夜景”模式,暗光增强涉及到图像配准和图像融合,最近整理该算法,在此做下总结。
图像配准和融合的方法主要分为三种:
1.基于像素的配准,特点计算量小,用于初步配准;
2.基于特征的配准,特点计算量大,先进行特征提取,如SIFT、SURF等;定位准确;
3.基于模型的配准,用于精细配准。
【Ref】:
[1] Darkness Lighting
[2] 图像融合中的图像配准方法研究
[3] OpenCV探索之路(二十四)图像拼接和图像融合技术
[4] 图像金字塔
[5] OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
[6] SURF算法与源码分析、上
MySQL求中位数。
环境:windows7 32bit,MySQL version:5.7.20.
准备工作:启动MySQL并创建table:
1.启动MySQL服务:
net start mysql
2.登录mysql:
mysql -uroot -p 回车输入密码
3.查看当前所有数据库:
show databases;
如下:
4.创建数据库:
create database lcl;
5.进入数据库:
use lcl;
建 table:
插入数据:
①:将数据排序,并给每一行数据给出其在所有数据中的排名:
②:找出中位数的排名数字,但是这种方法只能找到行数为奇数时的中位数:
③:无意在stackoverflow上看到了别人优化后的方法:
上面只是对一组数据求中位数,如何对多组数据操作呢?
思路是先对数组按n个分组进行排序,再对这n个分组求中位数。
待优化……
【Ref】:
[1] 在MySQL中,如何计算一组数据的中位数?
[2] MySQL Calculate Median
[3] Simple way to calculate median with MySQL
[4] code
公司的OpenCL环境是刚入职时师姐给配置的,记得当时是先安装了AMD显卡驱动,然后安装了AMD APP SDK,最后安装的是OpenCL GPU调试工具CodeXL。
但是问题来了,在自己的笔记本上安装之后,提示找不到GPU硬件,Unable to get platforms,猜想是AMD显卡驱动没有安装好,故重装驱动;在AMD官网上按照显卡的型号查找到自己电脑对应的驱动,安装之。
注意,显卡不是最新的话,最好不要下载AMD官网自动检测的驱动程序,我之前就是下载了官网自动检测的驱动然后OpenCL和CodeXL就检测不到Platform了!对,就是下面的这个东东:
要自己指定所用显卡对应的驱动:
安装好之后,打开CodeXL查看系统信息,可检测到GPU:
运行OpenCL Samples中的HelloWorld,结果是这样的:
记之。
【Ref】:
[1] Download AMD Drivers & Software for Radeon, FirePro, APU, CPU, desktops, and laptops
[2] AMD Display Driver
[3] APP SDK – A Complete Development Platform
[4] CodeXL
List Dynamic Dependencies (ldd),用来查看程序运行所依赖的共享库,常用来解决程序因缺少某个库文件而不能运行的问题。(ldd prints the shared libraries required by each program or shared library on the command line.)
帮助:
ldd --help
man ldd
Usage:
ldd [Option]... File...
eg:
第一列:程序所依赖的库;
第二列:系统提供的与程序需要的库所对应的库;
第三列:库加载的开始地址。
ldd命令是依靠设置一些环境变量而实现的,也就是说ldd的作用只是设置一些环境变量的值。
如:LD_TRACE-LOADED_OBJECTS,只要设置其值非空即可:
$ export LD_TRACE-LOADED_OBJECTS=1
$ ls /usr
运行结果:
撤销该环境变量,ls即可恢复正常使用:
$ unset LD_TRACE-LOADED_OBJECTS
$ ls /usr/
运行结果如下:
从上可知,ldd默认开启的环境变量是:LD_TRACE-LOADED_OBJECTS=1
【Ref】
[1] ldd命令
[2] ldd 查看程序依赖库
OpenCL(GPU)程序,矩阵转置,对如下的8*8矩阵进行转置运算:
分块大小为:22,一共有(8/2)(8/2)个矩阵块,分对角线和非对角线上的矩阵块;对角线上的块是矩阵内部行列互换,非对角线上的块与自己对称的矩阵块行列互换,需要处理的工作项的个数为上三角矩阵块的个数:4*(4+1)/2=10个,程序的运行结果如下:
【Ref】:
[1] OpenCL实现矩阵转置
[2] source code
Keras构建神经网络的步骤如下:
代码如下:
import time
from keras.models import Sequential
from keras.layers import Dense
import numpy
start = time.time()
# fix random seed for reproducibility
numpy.random.seed(7)
#load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv",delimiter=",")
#split into input(x) output(y) variables
x = dataset[:,0:8]
y = dataset[:,8]
#create model
model = Sequential()
model.add(Dense(12,input_dim=8,activation='relu'))
model.add(Dense(8,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
#compile model
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#fit the model
model.fit(x,y,epochs=150,batch_size=10)
#evaluate the model
scores = model.evaluate(x,y)
print("\n%s: %.2f%%" %(model.metrics_names[1],scores[1]*100))
end = time.time()
print 'Run time: '
print end - start
运行结果:
【Ref】
[1] Develop Your First Neural Network in Python With Keras Step-By-Step
[2] Keras常用层