生活中图像处理的一个小应用

生活中图像处理的一个小应用

上周六做了一个频闪实验来研究物体的运动,但是由于频闪图片的特点必须在暗室拍摄才有效果,由于一些原因图片有些地方过曝形成死白,而另一些地方由于光太少曝光太少,导致了黑乎乎的一片。最终结果就是,很难看到物体的运动轨迹。
上图
生活中图像处理的一个小应用
这张图乍眼一看几乎什么都看不出来,跟别说取物体的坐标点了。

当时就想到了刚学了点数字图像处理,于是就想着怎么把这个图像处理一下让他的物体细节更加清晰,于是我尝试了很多方法。

第一个想到的是把图像变成灰色图像然后再把它选择合适的值给二值化,后来发现结果不尽如人意,因为左边的图像亮度偏高,亮度分布复杂,很容易要么丢失白线(物体上的标志)要么白线跟其他的混为一块白色,进过多次试验发现没有能把它分分开的灰度值。

试了很多次处理方法,终于发现了一个效果比较好的方法直方图均衡化
先介绍一下直方图均衡化
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
  缺点:
  1)变换后图像的灰度级减少,某些细节消失;
  2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
最后反思一下,发现这种方法确实合适,我们拍的图在灰度值较大的的区域分布得很密集,直方图均衡化把他们分开,那么很多变化就突出了,就好比示波器把横坐标时间和纵坐标幅值放大来观察波形一样。
经过直方图均衡化的效果如图

matlab代码如下
I=imread('DSC08020.jpg');
I=rgb2gray(I);
figure;
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imhist(I);
I1=histeq(I);
figure;
subplot(2,2,1);
imshow(I1);
subplot(2,2,2);
imhist(I1);
imwrite(I1,'result.jpg');%保存到m文件的目录下


生活中图像处理的一个小应用
这样就能很清晰的看到,物体的运动了。



做到这里我还是不满意,于是打算使用图像处理检测到白线。但是无论我用什么边缘检测又或者hough变换发现效果都很差,主要是检测到很多非白线的东西,根本没法判断。
套用模式识别的知识,在这个特征空间中这个是很难分开的(直线 、边缘),或者这种算法不可分。
这次就到这里关于图像处理我只懂皮毛,希望能够跟深入的了解图像处理的知识。