Bonnie's house


  • 首页

  • 分类

  • 归档

抖动算法介绍

发表于 2019-04-29

抖动算法的引入

​根据维基百科的介绍:抖动是故意应用的噪声形式,用于使量化误差随机化,从而防止图像经过量化后出现色带之类的图案。

dither1

​上图为一种抖动算法的效果示例,第2、3幅图都是由仅由像素值0和255显示出来的图。其中第2幅图以127为阈值对图像进行二值化的结果。第3幅图是图像二值化过程中运用抖动算法的结果。第3幅图在视觉效果上更接近与原图,明显比第2幅图更好。

几种抖动算法介绍

固定阈值抖动算法

​当这个固定阈值取平均值时,又叫做平均抖动算法。它将图像像素的平均值作为全局阈值来决定该点的像素值应该是0还是255。当像素值高于阈值时取255,当像素值低于阈值时取0。这种一刀切的方法实现起来非常简单,但是量化所得图像的轮廓十分明显,图像过渡不自然。

随机抖动算法

​随机抖动算法是对固定阈值抖动算法的一种改进算法,将固定的阈值改成随机数。对每个像素点,生成0-255范围内的随机数作为来与之比较,当位置像素值大于生成的随机数时,将像素值赋值为255,否则赋值为0。这样,即使原来一张图中全部是127的灰度图像,其处理结果也是一般像素值为0,一半像素值为255,整体呈现灰色。如图2,灰色部分可用黑白交替的像素点表示。

pixel

有序抖动算法

​使用一个固定数组的值作为阈值,将像素值压缩到数组取值范围内,再将其与固定数组对应位置阈值进行比较,大于阈值赋值为255,否则赋值为0。阈值数组有各种尺寸的:

random

Floyd-Steinberg 抖动算法

​ 这是抖动算法里的一个效果比较好的经典方法,是基于量化误差扩散技术的方法。对图中的每个像素点,首先找到其最接近的量化值,计算该像素点与量化值的误差,然后划分这些误差量,将其分配到其临近的像素点中去。
ordered

1
2
3
4
5
6
7
8
9
10
for each y from top to bottom
for each x from left to right
oldpixel := pixel[x][y]
newpixel := find_closest_palette_color(oldpixel)
pixel[x][y] := newpixel
quant_error := oldpixel - newpixel
pixel[x + 1][y ] := pixel[x + 1][y ] + quant_error * 7 / 16
pixel[x - 1][y + 1] := pixel[x - 1][y + 1] + quant_error * 3 / 16
pixel[x ][y + 1] := pixel[x ][y + 1] + quant_error * 5 / 16
pixel[x + 1][y + 1] := pixel[x + 1][y + 1] + quant_error * 1 / 16

几种方法效果比较

dither2

腾讯云服务器配置

发表于 2018-10-27

更换软件源为中科大

租用一台腾讯云的学生机,并且搭建ubuntu16.04的系统。将系统源更新为国内的源,相对速度会快一些,本文用的是中科大的源。
ubuntu更新软件可有两种方式,apt-get和pip。pip用来安装来自PYPI的python的所有依赖包,并且可以选择安装任何在PYPI上已上传的先前版本依赖包;apt-get用来安装软件、更新源,它只是安装(最新发布,或最近一个的)单一版本,并且我们不能决定我们要安装的依赖包的版本或者选择它之前的版本。
将apt-get源和pip源都更新为中科大的源。

apt-get源的更新:

1
vim /etc/apt/sources.list

将其内容替换为:

1
2
3
4
5
6
7
8
9
10
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse

保存退出,apt-get源的更新完成。有需要可以sudo apt-get update把apt都更新一下。

pip源的更新

若无pip则安装,我安装的是pip3。

1
cd .pip/pip.conf

更改相关配置:

1
2
3
[global]
index-url =https://pypi.mirrors.ustc.edu.cn/simple/
trusted-host =pypi.mirrors.ustc.edu.cn

保存退出,pip源的更新完成,至此pip3和apt-get两种软件更新方法的源就都更新成了中科大的源。

配置登录密钥

1
2
cd .ssh
ssh-keygen -t rsa

以上命令可生成一对密钥对,用的是非对称加密方式RSA,将密钥命名为Y,则可得到私钥Y和公钥Y.pub的。

1
ssh-copy-id -i ~/.ssh/Y.pub ubuntu@(ip)

上述将公钥上传到服务器上,然后将私钥加入到ssh agent:

1
ssh-add ~/.ssh/Y

至此,密钥配置完成。

禁用密码登录

​由于服务器还是可以用密码登录,为了防止黑客通过穷举密码来登录服务器,要关闭服务器的密码登录方式,只允许密钥登录。

1
sudo vi /etc/ssh/sshd_config

然后更改配置文件

1
2
3
4
5
\\禁用密码登录
PasswordAuthentication no
\\启用密钥验证
RSAAuthentication yes
PubkeyAuthentication yes

保存退出。现在,服务器的密码登录方式已经被禁止啦。

批量文件重命名(字符串的替换,删除,连接)

发表于 2018-08-21

此次练习目的:

将

1
D:\OPPO_R11\indoor\day\tripod\light\original\lab\lab_01.mp4

重命名为

1
D:\OPPO_R11\indoor\day\tripod\light\original\lab\OPPO_R11indoor_day_tripod_light_lab_01.mp4

即将文件名中的名字前面加上其路径。

1.用os.walk()函数遍历文件夹下的所有文件,返回root,dir,files。其中root为:

1
D:\OPPO_R11\indoor\day\tripod\light\original\lab

file为

1
lab_01.mp4

2.用os.path.join连接root和file得到文件的原始绝对路径,即为:

1
D:\OPPO_R11\indoor\day\tripod\light\original\lab\lab01.mp4

3.去掉多余的一个lab

1
2
string=str.split("_")
new_file=string[-1]

得到的new_file即为01.mp4

4.去掉’D:’,并将’/‘替换为‘_’,主要用replace()函数,其中替换’\’是一个难点。直接运行:

1
new_name=new_name.replace('\','_')

报错:SyntaxError: EOL while scanning string literal

因为’\’被当成了转义字符,用os.sep代替’\’就可以解决问题了。

1
new_name=new_name.replace(os.sep,'_')

5.os.rename(original_name,new_file_name)即可实现文件重命名。注意这里的original_name,new_file_name都是指的是绝对路径名。

数据预处理

发表于 2018-07-31

总结一下之前学习的一个三维人脸数据预处理的过程,我申请到的数据库为BosphorusDB数据库,这是matlab读取的一个.bnt文件显示图:
原始点云示意图1

首先对人脸进行球体切割,以鼻尖为原点,$r=110mm$

切割后点云示意图

然后进行三次样条插值,使所有数据点的分辨率一致,插值后显示是这样:

样条插值后示意图

然后使用高斯滤波器和中值滤波器平滑数据

平滑后人脸示意图

最后为了对数据进行重采样重采样后点云示意图

Bonnie

Bonnie

Man must have the will,or else will do nothing.

4 日志
© 2019 Bonnie
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4