WhyCan Forum(哇酷开发者社区)

人过留名,雁过留声,感谢各位朋友不离不弃地支持。 QQ: 516333132, 微信: whycan_cn (哇酷网/挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2020-03-24 22:45:16

打老虎
会员
注册时间: 2019-04-03
累计积分: 14

关于Tslib内的滤波算法,再水一贴

之前水了一贴tslib的校正算法,这次水一水滤波算法。查看tslib的介绍,发现其触摸屏的运行设置如下:
1_20200324-2229.jpg

从触摸屏中读取的x,y轴的AD值经过滤波或消抖再进行坐标转换。

首先进行的是中值滤波(median),中值滤波是个什么鬼?那就要先讲讲椒盐噪声。

区别于周期分别的噪声,椒盐噪声是随机出现的突变,比如采集到的数据大部分维持在一个数值,然而偏偏有几个数据远远超出平均数。但是常用的均值滤波,即连续几个数值相加取平均值,对此类噪声作用不大,反而可能引起数据波动。

最为常见的椒盐噪声还是在图像上,由图像传感器的传输信道或解码处理而产生的亮点或暗点。
以下图本人完全不认识的不知名小姐姐为例:
4_20200324-2229.jpg 原图

写一段python看看加入椒盐噪声的现象,以及中值滤波与均值滤波之后的效果

import cv2
import numpy as np

SNR = 0.99

filename = "E:/Erika Momotani.jpg"
img = cv2.imread(filename)

cv2.imshow('ori', img)

size = img.size;
noise = int(size * (1 - SNR))
for i in range(0, noise):
    x = int(np.random.uniform(0, img.shape[1]))
    y = int(np.random.uniform(0, img.shape[0]))
    img[y, x] = 0

mb_img = cv2.medianBlur(img, 3)
a_img = cv2.blur(img, (5, 5))
cv2.imshow('salt', img)
cv2.imshow('median', mb_img)
cv2.imshow('average', a_img)
cv2.waitKey(0)

5_20200324-2229.jpg 椒盐噪声
可以看到我们在原图里随机加入了椒盐噪声,即随机出现暗点,犹如图像上被撒上了椒盐。


7_20200324-2230.jpg 均值滤波 中值滤波
6_20200324-2230.jpg 中值/椒盐滤波 椒盐滤波

我们对加入噪声后的图像分别做3x3的均值滤波和中值滤波,可以发现两者图像均有一定失真,然而均值滤波并未完全滤除掉椒盐噪声(反而有点扩散了!!!),而中值则几乎看不出椒盐噪声了。可见中值滤波对脉冲噪声可以起到优秀的滤除作用。

------------------------------分割线---------------------------------------

下面回到触摸采样。
我在自己的触摸屏代码中连续取出512个x轴的原始采样值,以及中值滤波之后的值并画图。python画图代码(数据被保存到两个txt文件)如下:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator

x, y = [], []

with open('E:/tp_x.txt', 'r') as file:
    lines = file.readlines();
    for line in lines:
        temp = line.split()
        x.append(int(temp[0], 16))

with open('E:/tp_x1.txt', 'r') as file:
    lines = file.readlines();
    for line in lines:
        temp = line.split()
        y.append(int(temp[0], 16))

plt.plot(x, c='b', linewidth=1.8)
plt.plot(y, c='r', linewidth=1.8)
plt.title('tp')

x_major_locator=MultipleLocator(16)
y_major_locator=MultipleLocator(100);
ax=plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
ax.yaxis.set_major_locator(y_major_locator)
plt.xlim(0,512)
plt.ylim(0,800)

plt.show()

3_20200324-2230.jpg
蓝色为原始数据,红色为中值滤波之后的数据

可以看到在没有按下触摸屏的时候值应为0,然而会随机出现尖峰。经过中值滤波之后绝大部分噪声会被滤去。



好了下面说说如何实现中值滤波。
关键的来的,看到tslib下median.c文件,通篇看下来最重要的函数即qsort()。OK,我们把它拉到百度搜索,就会发现
8_20200324-2230.jpg

没看错,就是冒泡法取中值。

又水一贴,完结撒花。

离线

#2 2020-03-24 22:46:04

打老虎
会员
注册时间: 2019-04-03
累计积分: 14

Re: 关于Tslib内的滤波算法,再水一贴

自己顶

离线

#3 2020-03-24 22:56:10

awfans
会员
注册时间: 2018-04-03
累计积分: 256

Re: 关于Tslib内的滤波算法,再水一贴

帖子一个字都没看懂,被美女吸引过来了。

离线

#4 2020-03-24 23:09:29

metro
会员
注册时间: 2019-03-09
累计积分: 208

Re: 关于Tslib内的滤波算法,再水一贴

说起测试图第一个想到的就是Lenna,学过DSP的同学都懂,哈哈。lena.jpg

离线

#5 2020-03-24 23:25:30

孤星泪
会员
注册时间: 2020-03-18
累计积分: 17

Re: 关于Tslib内的滤波算法,再水一贴

想知道楼主测试图的美女是谁?

离线

#6 2020-03-25 00:00:49

打老虎
会员
注册时间: 2019-04-03
累计积分: 14

Re: 关于Tslib内的滤波算法,再水一贴

metro 说:

说起测试图第一个想到的就是Lenna,学过DSP的同学都懂,哈哈。https://whycan.cn/files/members/1510/lena.jpg

Lenna的图测试了这么多年,该换换:cool

离线

#7 2020-03-25 00:01:38

打老虎
会员
注册时间: 2019-04-03
累计积分: 14

Re: 关于Tslib内的滤波算法,再水一贴

孤星泪 说:

想知道楼主测试图的美女是谁?

代码里有名字

离线

#8 2020-03-25 08:52:28

OggyJFX
会员
注册时间: 2019-05-21
累计积分: 66

Re: 关于Tslib内的滤波算法,再水一贴

好像两张滤波后的图片,右边的注释写错了。

离线

#9 2020-03-25 09:07:10

打老虎
会员
注册时间: 2019-04-03
累计积分: 14

Re: 关于Tslib内的滤波算法,再水一贴

OggyJFX 说:

好像两张滤波后的图片,右边的注释写错了。

好吧,,,,失误了,上面是均值滤波,下面是中值/椒盐滤波

离线

#10 2020-03-25 09:20:42

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 264

Re: 关于Tslib内的滤波算法,再水一贴

metro 说:

说起测试图第一个想到的就是Lenna,学过DSP的同学都懂,哈哈。https://whycan.cn/files/members/1510/lena.jpg

可以看看原图(:LOL

离线

#11 2020-03-25 09:41:46

metro
会员
注册时间: 2019-03-09
累计积分: 208

Re: 关于Tslib内的滤波算法,再水一贴

微凉VeiLiang 说:

可以看看原图(:LOL

考虑一下站长的感受,就不放上来了(

离线

#12 2020-03-25 10:58:06

小智
会员
注册时间: 2019-10-16
累计积分: 51

Re: 关于Tslib内的滤波算法,再水一贴

学习了

离线

#13 2020-03-25 15:01:50

novice
会员
注册时间: 2019-07-26
累计积分: 16

Re: 关于Tslib内的滤波算法,再水一贴

请问tslib裸机移植哪里有源代码?

离线

#14 2020-03-25 18:59:26

打老虎
会员
注册时间: 2019-04-03
累计积分: 14

Re: 关于Tslib内的滤波算法,再水一贴

novice 说:

请问tslib裸机移植哪里有源代码?

http://www.tslib.org/

我自己只是用了里面的校正和滤波的算法思路

离线

页脚