[转帖]图像去噪声及图像缩放算法

视频流时序参数:
TABLE I. Timing information
Horizontal timing      Scanline part Pixels 
Visible area 1024   Front porch 24   Sync pulse 136   Back porch 160   Whole line 1344
Vertical timing        Frame part Lines
Visible area 768    Front porch 3    Sync pulse 6     Back porch 29    Whole frame 806
综合报告图
TABLE VIII. Synthesis results of Canny edge detector.
Resource Type
Usage Percent of FPGA

Slices Registers
1028
1%

Slices LUTs
1388
2%

Block RAM/FIFO
11
7%

DSP48Es
1
1%

Sync pulse同步脉冲,front/back porch前沿/后沿,Visible area能见区、可视区。Whole line整行。


一颗画质增强芯片--Toshiba推广。。。。 来源:http://yyuan163.blog.163.com/blog/static/13183174820091061110804/

yuv<-->rgb

Y'= 0.299*R' + 0.587*G' + 0.114*B'

U'= -0.147*R' - 0.289*G' + 0.436*B' = 0.492*(B'- Y')

V'= 0.615*R' - 0.515*G' - 0.100*B' = 0.877*(R'- Y')

R' = Y' + 1.140*V'

G' = Y' - 0.394*U' - 0.581*V'

B' = Y' + 2.032*U'


http://www.cnblogs.com/lunix/archive/2011/07/31/rgb2yuv_design_verification.html

YUV2RGB和RGB2YUV的硬件实现,QuartusII
噪声的各类:加性噪声、乘性噪声、高斯噪声、椒盐噪声、纹理、纹子、马赛克
减少噪声的方法可以在图像空间域或在图像变换域中完成。
图像空间域去噪方法很多,如:线性滤波法、中值滤波法、维纳滤波法等。
图像变换域去噪方法有:傅里叶变换和小波变换

来源:http://www.doc88.com/p-998318343398.html

实际应用中,应在处理噪声图像前明确以下两点:1、图像受到何种类型的噪声干扰。2、受噪声干扰的程度,然后选择适当的平滑滤波技术,减少图像去噪过程的盲目性。还应针对具体的应用背景和给定的图像类型,综合考虑不同要求,并考虑将不同去噪方法结合起来,获得更好的去噪效果。

邻域平均法、空间域低通滤波法、多幅图像平均法和中值滤波法。

奇景光电的介绍:http://baike.baidu.com/link?url=_ApmwYO8W-j2gxfInQbPThXFeNhkOJEEkClR3tVh7Yg0SODU77kma9ePHQyCyzAHpK_zDTTnmt0ZmVQm5jCOqq

当一个模块内同步用到两块同样的ROM时,此时可以优化成一个双端口的ROM,这个我没想到,是Ronnie提示的。

来源:http://www.doc88.com/p-40295234806.html 图像缩放算法的研究与FPGA设计

Silicon Image、Intel(英特尔)、Compaq(康柏)、IBM、HP(惠普)、NEC、Fujitsu(富士通)等公司。

DVI: Digital Visual Interface  VGA: Video Graphic Array

TMDS: Transition Minimized Differential Signal转换最小差分信号

DDWG: Digital Display Working Group数字显示工作组

TMDS发送器和TMDS接收器、DVI连接器和DVI线缆

SVGA: 800X600 XGA: 1024X768 UXGA: 1600X1200

图像缩放算法:http://vaero.blog.51cto.com/4350852/822997 写得不错!图像基本处理算法的简单实现

来源:http://www.kunli.info/2011/02/15/fourier-wavelet-motion-signal-1/  写得非常好!!!

压缩也好,滤波也好,图形处理也好,本质都是变换。变换的是什么东西呢?是基,也就是basis。傅立叶变换-傅立叶展开-傅立叶级数-级数、系数(正交),小波变换。一个空间中可能有很多种形式的basis,什么样的basis比较好,很大程度上取决于这个basis服务于什么应用。比如如果我们希望选取有利于压缩的话,那么就希望这个basis能用其中很少的向量来最大程度地表示信号,这样即使把别的向量给砍了,信号也不会损失很多。总的来说,抛开具体的应用不谈,所有的basis,我们都希望它们有一个共同的特点,那就是,容易计算,用最简单的方式呈现最多的信号特性。向量是离散的,所以累加,函数是连续的,那就是…….积分!但千万别误解为展开变换所用的basis都是正交的,这完全取决于具体的使用需求,比如泰勒展开的basis就只是简单的非正交多项式。

正弦波,这玩意以有着无穷的能量,同样的幅度在整个无穷大区间里面振荡。那小波是什么呢?是一种能量在时域非常集中的波。它的能量是有限的,而且集中在某一点附近。这种小波有什么好处呢?它对于分析瞬时时变信号非常有用。它有效的从信号中提取信息,通过伸缩和平移等运算功能对函数或信号进行多尺度细化分析,解决了傅立叶变换不能解决的许多困难问题。任何小波变换的basis函数,其实就是对这个母小波和父小波缩放和平移后的集合。缩放倍数都是2的级数,平移的大小和当前其缩放的程度有关。这样的好处是,小波的basis函数既有高频又有低频,同时还覆盖了时域。小波级数通常是正规化的基,也就是说,它们不仅两两正交,还归一化了。小波变换是二维变换。那么二维变换呢?频域和时域定位是如何进行的呢?小波变换的等式定义,可以没有积分,没有微分,仅仅是乘法和加法即可以做到,和现代计算机的计算指令完全match。我们以一些基本的信号处理来呈现小波变换比傅立叶变换好的地方,大概能隐约感受到小波变换的强大,并对背后的原理充满期待:)。因为傅立叶必须用三角波来展开信号,对于这种变换突然而剧烈的信号来讲,即使只有一小段变换,傅立叶也不得不用大量的三角波去拟合。

由于小波basis的特殊性,任何小波和常量函数的内积都趋近于0。换句话说,选小波的时候,就需要保证母小波在一个周期的积分趋近于0。正是这个有趣的性质,让小波变换的计算以及对信号的诠释比傅立叶变换更胜一筹!原因在于,小波变换允许更加精确的局部描述以及信号特征的分离。一个傅立叶系数通常表示某个贯穿整个时间域的信号分量,因此,即使是临时的信号,其特征也被强扯到了整个时间周期去描述。而小波展开的系数则代表了对应分量它当下的自己,因此非常容易诠释。对于小波变换来讲,基是变的,是可以根据信号来推导或者构建出来的,只要符合小波变换的性质和特点即可。也就是说,如果你有着比较特殊的信号需要处理,你甚至可以构建一个专门针对这种特殊信号的小波basis function集合对其进行分析。这种灵活性是任何别的变换都无法比拟的。总结来说,傅立叶变换适合周期性的,统计特性不随时间变化的信号; 而小波变换则适用于大部分信号,尤其是瞬时信号。它针对绝大部分信号的压缩,去噪,检测效果都特别好。

多解析度分析multiresolution analysis, MRA。这里的k是可以看成时域的参数,因为它控制着小波基时域的转移,而j是频域的参数,因为它决定了小波基的频率特性。

通称 画面大小
NTSC: 720×480, PAL: 720×576, XGA: 1024×768, 720P: 1280×720, WXGA: 1280×768, HD: 1366×768, Full HD: 1920×1080,
4k2k: 3840x2160, 8k4k: 7680×4320

800 万有效像素(3840×2160)超高清 Ultra HD(Ultra High-Definition)  消费电子协会 CEA (Consumer Electronics Association)

2013-04-20   09:37:50

 有关FHD@60HZ  到4K2K@60HZ在最近邻域算法和双线性插值算法上的简化实现可以查看Agenda介绍。其实关于双线性插值算法上的简化实现,最初采用了提升时钟的方法,但涉及到跨时钟域的问题,后面又跟Ronni讨论下,发现他确实非常厉害,马上给出了让我非常满意的架构,其实方法跟最近邻域算法的简化实现类似,只是在此基础上再添些控制信号。部分调试过程记录如下,其实是有误,只是觉得它也是一种经验,感觉不错就备份下。

//模块名和for, i结合使用,功能是实现rd_en延时5个时钟后再输出。

parameter N =5'd5;//delay rd_en 5 clock;

wire rd_en2;

reg [N-1 :0]rd_en2_r;

assign rd_en2 = rd_en2_r[N-1];

always @ ( posedge clk or posedge rst)

begin : rd_en2_value

  integer i;

  if(rst) begin rd_en2_r <= 3'd0;

  end

  else begin

    rd_en2_r[0] <= rd_en;

    for(i=0;i<N;i=i+1) begin

            rd_en2_r[i+1] <= rd_en2_r[i];

    end

  end

end

  1. DPRAM核添加的读使能信号rd_en(变化后一直为高电平),它与rd_addr_en地址使能信号在第一次时同步变化,才能保证rd_addr_en高电平区间地址所对应的数据全部正确输出。
  2. FHD@60HZ到4K2K@60HZ的放大,LVDS的时钟频率是一样,只是一个时钟输出的像素点由2个变成8个,LVDS就由2路变成8路(4倍关系)。如果是用简化后的最近邻域算法,数据可以简单复制邻近的数据,DPRAM中读写时钟保持不变,而读数据的宽度是写数据的2倍(行的倍频),待得4个数据,再进行复制成8个(列的倍频)。但是如果是用简化后的双线性插值算法,数据就不再是简单的复制成8个,而是算出来的,一个像素与它周围的4个象素有关,因此读的数据不再是连续的。这样导致的结果是读的时钟是写时钟的2倍快,这样一次可以输出指定的两组数据,只是输出的数据最终还是要以写时钟的速率输出8个点,那由快时钟如何过渡到慢时钟,这让我难办。
  3. Clkx2经过两个时钟分别输出p1和p2,现在要在clk下经过一个时钟同时输出p1和p2,这样就涉及跨时钟的问题,但庆幸的是它们的关系是对应的,即速率可以匹配。
  4. 当参考时钟refclk与其产生的时钟clkx1,clkx2有相同时,则全局时钟必须采用它产生的时钟clkx1,否则会出现相邻数据错乱,clkx1的触发必然会慢refclk一个寄存器,虽然看起来是一样。跨时钟的处理要特别小心。
  5. DPRAM核的设置要特别注意,当读写时钟不一样时,common clock选项是不能选的,否则输出的数据会以写入时钟对齐,导致输出丢失一半的数据。还有就是输出不要延时一个时钟,这样会丢失一个数据。(DPRAM中有两个打勾的地方要小心。)
  6. 2013年4月15日星期一   刚才跟Ronnie讨论了下,发现自己采用的架构不好,没有减少DPRAM的容量,且增加了时钟和逻辑的复杂度。我是存储三行,如果要让时钟保持不变,就必须分3个DPRAM来分别存储3行,这样可以实现同时控制DPRAM的功能,而且操作起来也比较容易。发现自己真的很没认真地思考,今天想了一天的代码,全部撤消了。以后要练习自己整体思维的能力,力求以快、准、狠心来解决问题。
  7. 一行对应一个DPRAM,奇数行的处理是一次性读取4个pixel,处理成8个pixel输出。偶数行的处理是一次性读取8个pixel,然后分别算出8个pixel输出。注意交界处及行末和列末。问题是我提出的,而解决方案是Ronnie给出的。我觉得他挺厉害的。
  8. LVDS本来是一个通道用一个PLL,且RX和TX也各用一个PLL,目前wenfan已经改成所有通道和RX及TX均共用一个PLL,节省PLL的使用。 

DPRAM只存储DE有效区的RGB信号,存储方便,但读取时,就要注意时机,H的无效区采用延时处理,而V的无效区也同样采用延时处理。还有RGB在H末尾和V末尾时的处理。 


2013-04-11   07:53:06 

其实对于FHD@60HZ到4K2K@60HZ的放大,只要对FHD中帧有效区的RGB信号进行Upscaling处理得到4K2K中帧有效区中的RGB信号,而其他信号如DE、V、H等信号可以根据PANEL的屏参来产生(Ronnie说4K2K的参数必须来自前端的FHD的参数,因此需要计算出所有所需的参数,其实我觉得应该是根据屏参来产生??),这样可以大大减少内存空间的存储及逻辑资源。

如果参数根据前端FHD来计算。从各路LVDS角度出发,由于场频信号不变,因此4K2K中V的参数大小与FHD中V的参数大小一样。由于Upscaling处理,所以4K2K中H的参数大小是FHD中H的一半,因此4K2K中V的参数相对4K2K中H的参数来讲均增大一倍。因为V是根据H来计算的,而H是根据像素点来计算的。此外LVDS的路数也由2组变成8组成,只有这样才能保证速率一致。

如果参数直接采用PANEL的屏参。从整体上讲若PANEL的消隐区是400个像素点,而FHD的消隐区只有10,4倍后也才40,这样会导致一个结果就是PANEL还在发消隐区时,而FHD已经到有效区,这样速率上就无法匹配,PANEL跟不上FHD的速度。

    一个电平相对时钟时,有它的上升沿和下降沿,从而可以来提取信号并进行判断。这非常好用。如DE、H、V等,I2C Slave中SDA与SCL相对时钟的处理及判断。


2013-04-08    14:23:08

双线性插值算法和该方法的FPGA硬件实现方法 http://wenku.baidu.com/view/d0a5d569a98271fe910ef9b4.html

双线性插值算法的实例讲解:http://wenku.baidu.com/view/f6a10ed7c1c708a1284a44c2.html

灰度图像A若为2*2,放大后图像B为8*8,则B图像中(x,y)处的像素值应该对应着A图像中的(x/4,y/4)处的象素值,即  B(x,y) = A(x/4,y/4)--式1,位置的对应关系确定后。

对于B中的(4,4),(4,8),(4,16)…(256,256)这些位置,通过式1就可以计算出其在A中的位置,从而可以得到灰度值。但是,对于B中的(1,1),(1,2),(1,3)…等等这些坐标点而言,如果按照式1计算的话,那么它们在A中对应的坐标不再是整数。比如,对于B中的坐标点(1,1),其在A中的对应坐标就变成了(0.25,0.25)。对于数字图像而言,小数坐标是没有意义的。因此,必须考虑采用某种方法来得到B中像素点在A中对应位置上的灰度级。处理这一问题的方法被称为图像灰度级插值。常用的插值方式有三种:最近邻域插值、双线性插值、双三次插值。理论上来讲,最近邻域插值的效果最差,双三次插值的效果最好,双线性插值的效果介于两者之间。不过对于要求不是非常严格的图像插值而言,使用双线性插值通常就足够了。 


来源:http://www.cnblogs.com/tingshuo/archive/2011/05/13/2045649.html

横向分辨率乘以纵向分辨率为象素数

象素数乘以色彩深度(位数)再除以8(将bit转化为byte)便是文件大小
注意:实际上,文件会比计算的理论值略大(包含文件头和文件尾等记录文件尾类型等信息的部分)
首先从简单的入手:实现FHD@60HZ4K2K@60HZ的放大(Upscaling)。LVDS的组数由2路增加到8路输出,LVDS的时钟频率为74.25MHZ。
此功能可以通过DPRAM模块来实现,方法是先储蓄FHD一行数据,待一行储存完后开始输出2个单元的数据,同时继续储存第二行的数据。
当第二行储存完时,DPRAM也实现了行的倍增,而列的倍增可以通过复制来实现。具体如下所示:
DPRAM的DEPTH是2K(2行),写WIDTH是70bit(2个数据为1个单元-LVDS2路),读WIDTH是70*2bit。读写时钟一样。

//1920X1080@60HZ parameter definition 2groups-LVDS

parameter H_SYNC=40,H_FRONT=50,H_BACK=50,H_VISIBLE=960,H_HIDE=H_SYNC+H_FRONT+H_BACK,H_TOTAL=H_HIDE+H_VISIBLE;

parameter V_SYNC=5, V_FRONT=10,V_BACK=5,V_VISIBLE=1080,V_HIDE=V_SYNC+V_FRONT+V_BACK,V_TOTAL=V_HIDE+V_VISIBLE;


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

                                              图1  6*3

1

1

2

2

3

3

4

4

5

5

6

6

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

10

10

11

11

12

12

7

7

8

8

9

9

10

10

11

11

12

12

13

13

14

14

15

15

16

16

17

17

18

18

13

13

14

14

15

15

16

16

17

17

18

18

                                             图2  12*6
原文地址:https://www.cnblogs.com/zlh840/p/2988201.html