Real Time产生灰阶影像

【笔记】如何Real Time产生灰阶影像?(de2)(de2-70)(真OO无双博文)

1. 

至於怎樣才是正統的RGB轉灰階演算法呢?基本上這已經可以發論文討論了,一般來說,較讓大部分人所接受的公式是

Gray= 0.299 * R +0.587 * G +0.114 * B

這牽涉到浮點運算,不要說硬體難實現,光用C去寫,執行速度也很不理想,所以才會有人乾脆用(R+G+B) /3來做。若要在硬體實現,勢必再做一些簡化。

注意到RGB的權重嗎?G的權重幾乎是R2倍,B的權重的5倍,所以真正決定灰階程度的關鍵在於G,而RB的影響較不顯著,所以乾脆就用G來代表灰階,這種方式最有利於硬體實現。

2.

SDRAMVGAframe buffer,要real time產生灰階影像,有兩條路可以走:
1.SDRAM之前
也就是上圖黃色的Pre-processing之處,因為RGB合起來共30 bit,而灰階只有10 bit,這樣可省下1/2SDRAM空間(為什麼不是2/3?後面會解釋),且省下一半的頻寬。

2.SDRAM之後
也就是上圖黃色的Main Processing之處,這種方式雖然無法節省SDRAM,但比較好寫,結果一樣是灰階影像。

何種方式較好?要看實際應用而定,本文兩種方式都會討論。

3.

DE2是在DE2_DDC范例的基础上改的,输出是VGADE2-70是在DE2_70_D5M_LTM的基础上改的,输出是LTM

显示平台是个很重要的区别,de2-70的范例改法需要在vga-ctrl后面再接到ltm-ctrltouch_tcon)。

总结

RGB产生灰阶图像可以用(R+G+B) /3來做或者用G来代替,然后将GRAY分别都送到VGALTMRGB上即可。


1.

用Line Buffer的思想来做Sobel edge detector算法,实现类似以下运算:

P5對Gx的Magnitude= X1 * P1 + X2 * P2 + X3 * P3 + X4 * P4 + X5 * P5 + X6 * P6 + X7 * P7 + X8 * P8 + X9 * P9(即乘加電路)。 

其中line buffer使用Megafunction的altshift_tab達成,與Gx乘加的部分由Megafunction的altmult_add與parallel_add完成。

2.

在产生灰阶图像的基础上进行一些算法的实现,比如边缘检测、腐蚀、膨胀、开操作、比操作等。

1. 实验平台框架选用由AV输入视频,将之显示在LTM触摸屏上。代码框架选用DE2_70_TV来进行修改,其中将VGA显示改为LTM显示的更改已经完成。

2. 其次AV输入经过ADV7180后转换为数字码流BT656格式,需要将YCRCB颜色空间转换为RGB颜色空间。(此处的设想是将DE2_70_TV范例中YUV2RGB模块提前到数据写入SDRAM之前来,然后写入SDRAM的数据为RGB。)(并且在YUV2RGB模块的输出用G代替R、B来实现灰阶图像的产生,同时节省SDRAM资源和系统资源。)

3. 将从SDRAM中读出的数据送给相应的算法模块。(边缘检测、腐蚀、膨胀、开操作、比操作等)

首先由此熟悉如何在原有代码框架上添加算法,打通实验平台。以便进行后续工作。

3.

拟定随后做以下实验

1.在DE2_70_TV_LTM基础上添加灰阶图像转换算法,预期效果是在LTM上实时显示出数码相机采集到的彩色图像或灰阶图像且可以自由切换。

2.在DE2_70_TV_LTM基础上添加灰阶、二值图像转换算法,预期效果是在LTM上实时显示出数码相机采集到的彩色图像或灰阶图像或二值图像且可以自由切换。

3.在第二部分的基础上,添加膨胀算法模块,对二值图像进行膨胀运算,预期效果是在LTM上实时显示出数码相机采集到的彩色图像或膨胀前后的二值图像且可以自由切换。

4.在第二部分的基础上,添加边缘检测算法,对灰阶图像进行边缘检测,预期效果是在LTM上实时显示出灰阶图像或边缘图像且可以自由切换。

5.在第3、4部分的基础上,将之融合,将边缘检测后的图像进行膨胀操作,预期效果是在LTM上实时显示出膨胀前后的边缘图像,并观察膨胀操作的效果(填補影像中的空洞,也可以去除背景中雜訊的黑點)。

6.在前5个实验的基础上,将所有算法整合进一个工程,预期效果是在LTM上实时显示出各种算法对图像的处理结果,并可以由SW开关键随意切换。

原文地址:https://www.cnblogs.com/woshitianma/p/3045186.html