北京网站优化体验,学生个人网页,wordpress站点相关,公司做网站推广百度和阿里巴巴1.简介 在数字图像处理中#xff0c;经常需要用到的一个架构就是多帧缓存。视频流中需要用到多帧缓存来防止帧撕裂现象#xff0c;图像处理中也需要帧差法来做移动目标检测。因此一个多帧缓存架构在图像系统的设计中是十分重要的。
2.多帧缓存 在视频流中#xff0c;通常不…1.简介 在数字图像处理中经常需要用到的一个架构就是多帧缓存。视频流中需要用到多帧缓存来防止帧撕裂现象图像处理中也需要帧差法来做移动目标检测。因此一个多帧缓存架构在图像系统的设计中是十分重要的。
2.多帧缓存 在视频流中通常不能保证数据的写入和读取是同样帧率的写快读慢或者写慢读快都是常见现象。如果读写都在同一片内存地址中那么将不能保证读出的一帧是完整的一帧图像它很有可能是写入的图像中前多帧拼接而成的这样就会造成帧撕裂的情况。 假设写是读的三倍速度且只缓存一帧图像且读写同时开始操作同一片内存地址。来看看写三帧图像的同时读出的三帧分别发生了什么。 1可以看出在写完第一帧的时候读只读了写入第一帧的三分之一。 2开始写第二帧的时候读的还是第一帧的部分内容。 3第二帧写到中途时写追上读第二帧写完后读的第一帧中间有部分第二帧内容。 3开始写第三帧内容时由于写是读的三倍速度此时当读一帧完成时写第三帧也刚好完成。 由图可以看出当写时是读的三倍时读出的像素不是一副完整的图像而是有前两帧拼接而成的一副图像。当读写差异过大时读出的一副图像可能由多幅写入的图像构成这种现象被叫做帧撕裂。
2.1 乒乓操作 为了避免帧撕裂我们通常将读写的地址分开来确保读出的是一幅完整的图像。最常见的就是乒乓操作。将读写分两片地址来进行。 乒乓操作将读写分两块内存来进行操作同一片地址读写交错进行。核心操作就是快等慢。 读写地址同时从图像缓存区一进行读写快的操作第一个到达区域二慢的操作还在区域一。当快的操作先写完操作完一帧图像后查看慢操作是否在和自己操作同一帧是的话跳转下一片区域不是的话继续操作本内存区域等待慢操作到来。而慢操作只需要按照顺序来操作内存区域即可不需要查看快操作所操作的内存区域。这就是快等慢。 假如快操作在操作自己的一片内存区域的时候慢操作到来了因为快操作比慢操作快所以也不用担心在一副图像中读出两帧图像。 由乒乓操作延申出了三帧缓存多帧缓存架构多帧缓存的核心思想就是快操作会直接跳过慢操作所在的内存区域。但是这样做有一个缺点即事先需要知道读写操作的快慢来指导谁跳谁来确定编程代码 可不可以做到自适应呢个人想法读写操作刚开始时谁先操作完一副图像就可以在程序中标记谁是快操作谁是慢操作后续根据这个标记来指导读写的内存跳转即可以做到自适应的多帧缓存结构。编程可能稍微复杂但是节约内存空间。
2.2 自适应的多帧缓存架构 另一种的通用自适应多帧缓存架构也是基于多帧缓存的思想提出的。核心操作就是读操作永远是写操作的上一片内存而写操作就依次操作分配的内存区域。总结就是多帧缓存写比读低一帧缓存区。这种操作在读写速度一致和读快写慢的时候都可以有效保证帧的完整性但是在写比读快很多的且读写缓存区域分配不足的时候依然有写追上读而造成帧撕裂的情况。因此需要根据读写速度来分别足够的内存区域来满足多缓存架构的需要。
3 多缓存架构的实现 在数字图像处理中视频流通常由SDRAM或者DDR3来进行缓存。SDRAM一般自己编写驱动DDR3一般借由mig IP核驱动或者用ZYNQ的PS由AXI协议DMA访问。其中mig IP核可以选择AXI接口或者自己的接口。这里我们选择例化mig ip核并启用AXI接口。 一个完整的视频流传输系统的上电顺序应该为 #mermaid-svg-30reI7gHNnVr3hGn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-30reI7gHNnVr3hGn .error-icon{fill:#552222;}#mermaid-svg-30reI7gHNnVr3hGn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-30reI7gHNnVr3hGn .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-30reI7gHNnVr3hGn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-30reI7gHNnVr3hGn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-30reI7gHNnVr3hGn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-30reI7gHNnVr3hGn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-30reI7gHNnVr3hGn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-30reI7gHNnVr3hGn .marker.cross{stroke:#333333;}#mermaid-svg-30reI7gHNnVr3hGn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-30reI7gHNnVr3hGn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-30reI7gHNnVr3hGn .cluster-label text{fill:#333;}#mermaid-svg-30reI7gHNnVr3hGn .cluster-label span{color:#333;}#mermaid-svg-30reI7gHNnVr3hGn .label text,#mermaid-svg-30reI7gHNnVr3hGn span{fill:#333;color:#333;}#mermaid-svg-30reI7gHNnVr3hGn .node rect,#mermaid-svg-30reI7gHNnVr3hGn .node circle,#mermaid-svg-30reI7gHNnVr3hGn .node ellipse,#mermaid-svg-30reI7gHNnVr3hGn .node polygon,#mermaid-svg-30reI7gHNnVr3hGn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-30reI7gHNnVr3hGn .node .label{text-align:center;}#mermaid-svg-30reI7gHNnVr3hGn .node.clickable{cursor:pointer;}#mermaid-svg-30reI7gHNnVr3hGn .arrowheadPath{fill:#333333;}#mermaid-svg-30reI7gHNnVr3hGn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-30reI7gHNnVr3hGn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-30reI7gHNnVr3hGn .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-30reI7gHNnVr3hGn .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-30reI7gHNnVr3hGn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-30reI7gHNnVr3hGn .cluster text{fill:#333;}#mermaid-svg-30reI7gHNnVr3hGn .cluster span{color:#333;}#mermaid-svg-30reI7gHNnVr3hGn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-30reI7gHNnVr3hGn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 系统上电 存储器初始化完成 视频输入系统初始化完成 视频输出系统初始化完成 基于DDR3以及AXI协议多帧缓存架构的系统图如下 图中的红色区域是为了防止帧断流导致图像错位而无法恢复。每一帧开始时清空fifo和数据拼接区域帧结束时复位DMA的地址部分