0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA Verilog实现基本的图像滤波处理仿真

FPGA学习交流 2018-10-19 13:39 次阅读

1、用matlab代码,准备好把图片转化成Vivado Simulator识别的格式,即每行一个数据:
img = imread('E:\matlab\Images\2016-09-05-211710.jpg');
if size(img,3)==3
img = rgb2gray(img);
end
height = size(img, 1);
width = size(img, 2);
s = fopen('image2mem.txt','wb'); %opens the output file
cnt = 0;
for r=1:height
for c=1:width
cnt = cnt + 1;
grey=img(r,c);
greyb = dec2bin(grey,8);
Outbyte =greyb(1:8);

if (Outbyte(1:4) == '0000')fprintf(s,'0%X',bin2dec(Outbyte));
else fprintf(s,'%X',bin2dec(Outbyte)); end
if (mod(cnt,1) == 0)fprintf(s,'\r\n'); end
end
end
figure,imshow(img);
fclose(s);

2、EdgeSobel的Verilog源代码:
`timescale 1ns / 1ps

module EdgeSobel
(
input clk,
input [7:0] inData,
input [11:0]x,
input [11:0]y,
output [7:0] outData
);
parameter pixel_depth=8;
parameter frame_width=640;
parameter block_width=3;
parameter block_height=3;

parameter shiftRegSize=pixel_depth*((block_height-1)*frame_width+block_width);

reg[shiftRegSize-1:0] shiftReg;
wire [block_width*block_height*pixel_depth-1:0] Window;

initial begin shiftReg=10264'b0;end

always@(posedge clk)if((x<640)&&(y<480))shiftReg<={shiftReg,inData};

genvar i,j;
generate
for(i = 0; i < block_height; i = i + 1) begin : array
for(j = 0; j < block_width; j = j + 1) begin : vector
assign Window[pixel_depth*(i * block_width + j)+:pixel_depth] =shiftReg[pixel_depth*(i*frame_width+j)+:pixel_depth];
end
end
endgenerate

wire [7:0] average;
assign average =
(Window[7:0]+Window[15:8]+Window[23:16]+
//Window[31:24]+Window[39:32]+Window[47:40]+
Window[31:24]+Window[39:32]+Window[47:40]+
Window[55:48]+Window[63:56]+Window[71:64])/9 ;

wire signed [pixel_depth+1:0] Gx;
wire signed [pixel_depth+1:0] Gy;
wire [pixel_depth+1:0] Gxabs;
wire [pixel_depth+1:0] Gyabs;
wire [pixel_depth+1:0] G;

assign Gx = shiftReg[pixel_depth*(0*frame_width+2)+:pixel_depth]
+2*shiftReg[pixel_depth*(1*frame_width+2)+:pixel_depth]
+ shiftReg[pixel_depth*(2*frame_width+2)+:pixel_depth]
- shiftReg[pixel_depth*(0*frame_width+0)+:pixel_depth]
-2*shiftReg[pixel_depth*(1*frame_width+0)+:pixel_depth]
- shiftReg[pixel_depth*(2*frame_width+0)+:pixel_depth];
assign Gy = shiftReg[pixel_depth*(2*frame_width+0)+:pixel_depth]
+2*shiftReg[pixel_depth*(2*frame_width+1)+:pixel_depth]
+ shiftReg[pixel_depth*(2*frame_width+2)+:pixel_depth]
- shiftReg[pixel_depth*(0*frame_width+0)+:pixel_depth]
-2*shiftReg[pixel_depth*(0*frame_width+1)+:pixel_depth]
- shiftReg[pixel_depth*(0*frame_width+2)+:pixel_depth];
assign Gxabs = (Gx>0)?Gx-Gx);
assign Gyabs = (Gy>0)?Gy-Gy);
assign G = Gxabs+Gyabs;

//assign outData = average; //平滑
assign outData = G[9:2]; //边缘检测
endmodule

3、仿真文件:tb_EdgeSobel.v
`timescale 1ns / 1ps

module tb_edgesobel;

reg clk;
reg [7:0] inData;
reg [19:0] cnt;
reg [9:0] row;
wire [7:0] outData;
reg [7:0] image [307199:0];
integer file_id;
reg [4:0] frame_cnt;


initial
begin
$readmemh("E:/matlab/Vivado/image2mem.txt", image);
file_id = $fopen("E:/matlab/Vivado/mem2image.txt","w");
clk = 0;
cnt = 0;
row = 0;
frame_cnt = 0;
end

EdgeSobel u_2
(
.clk(clk),
.x(1),
.y(1),
.inData(inData),
.outData(outData)
);

always #1 clk = ~clk;

always@(posedge clk)
begin
if(cnt == 307200)
begin
cnt = 0;
row = 0;
frame_cnt = frame_cnt + 1;
end
else
inData = image[cnt];
cnt = cnt+1;
if(frame_cnt==1)
begin
$fwrite(file_id, "%d ", outData);
if(((cnt % 640)==0) &&(cnt>0))
begin
$fwrite(file_id,"\r\n");
row = row + 1;
end;
end
end
endmodule

4、把输出的txt文件转化成图片Matlab程序:
A=importdata('E:\matlab\Vivado\mem2image.txt');
A=A./255;
imshow(A);

注意这里的A是double类型的,直接进行imshow会全白,要转化到0-1:A=A./255,或者把double类型转化为整形。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593155
收藏 人收藏

    评论

    相关推荐

    基于Verilog HDL的FPGA图像滤波处理仿真实现

    注意这里的A是double类型的,直接进行imshow会全白,要转化到0-1:A=A./255,或者把double类型转化为整形。
    发表于 04-26 11:37 27次阅读
    基于<b class='flag-5'>Verilog</b> HDL的<b class='flag-5'>FPGA</b><b class='flag-5'>图像</b><b class='flag-5'>滤波</b><b class='flag-5'>处理</b><b class='flag-5'>仿真实现</b>

    FPGA图像处理之CLAHE算法

    FPGA图像处理--CLAHE算法(一)中介绍了为啥要用CLAHE算法来做图像增强。
    的头像 发表于 01-04 12:23 1479次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>图像</b><b class='flag-5'>处理</b>之CLAHE算法

    FPGA图像处理方法

    图像细节。 FPGA 图像处理方法 1、图像增强 两大方法:空间域方法和时间域方法(以后再详述) 2、
    的头像 发表于 12-02 13:15 602次阅读

    VerilogFPGA实现低通滤波

    在本文中,我们将简要介绍不同类型的滤波器,然后学习如何实现移动平均滤波器并使用CIC架构对其进行优化。
    发表于 10-02 15:38 1303次阅读
    用<b class='flag-5'>Verilog</b>在<b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>低通<b class='flag-5'>滤波</b>器

    数字信号处理FPGA实现

    和术语。◆u3000超过10个使用VHDL和Verilog设计的新的系统级案例研究◆u3000新增一章专门介绍图像和视频处理◆u3000更新后的AlteraQuartus和全新的ModelSim
    发表于 09-19 06:38

    #FPGA #图像处理 图像处理(概论)

    fpga图像处理
    奔跑的小鑫
    发布于 :2023年07月27日 10:15:04

    基于FPGA图像处理之直方图均衡

    最近一直在用FPGA图像处理相关的算法,主要是集中在图像增强和增晰方面。
    发表于 06-29 09:23 704次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>图像</b><b class='flag-5'>处理</b>之直方图均衡

    FPGA的数字信号处理:重写FIR逻辑以满足时序要求

    在上一篇文章中(FPGA 的数字信号处理Verilog 实现简单的 FIR 滤波器)演示了在 Veri
    的头像 发表于 06-09 09:39 608次阅读
    <b class='flag-5'>FPGA</b>的数字信号<b class='flag-5'>处理</b>:重写FIR逻辑以满足时序要求

    荐读:FPGA设计经验之图像处理

    系列:基于 FPGA图像边缘检测系统设计(sobel算法) FPGA设计中 Verilog HDL实现基本的
    发表于 06-08 15:55

    FPGA的数字信号处理Verilog实现简单的FIR滤波

    该项目介绍了如何使用 Verilog 实现具有预生成系数的简单 FIR 滤波器。
    的头像 发表于 06-07 14:51 2764次阅读
    <b class='flag-5'>FPGA</b>的数字信号<b class='flag-5'>处理</b>:<b class='flag-5'>Verilog</b><b class='flag-5'>实现</b>简单的FIR<b class='flag-5'>滤波</b>器

    FPGA设计中 Verilog HDL实现基本的图像滤波处理仿真

    带来FPGA设计中用Verilog HDL实现基本的图像滤波处理
    发表于 06-07 14:48

    求一种FPGA实现图像去雾的实现设计方案

    本文详细描述了FPGA实现图像去雾的实现设计方案,采用暗通道先验算法实现,并利用verilog
    发表于 06-05 17:01 897次阅读
    求一种<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b><b class='flag-5'>图像</b>去雾的<b class='flag-5'>实现</b>设计方案

    基2FFT的verilog代码实现仿真

    上文基2FFT的算法推导及python仿真推导了基2FFT的公式,并通过python做了算法验证,本文使用verilog实现8点基2FFT的代码。
    的头像 发表于 06-02 12:38 692次阅读
    基2FFT的<b class='flag-5'>verilog</b>代码<b class='flag-5'>实现</b>及<b class='flag-5'>仿真</b>

    并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并
    的头像 发表于 05-24 10:57 707次阅读
    并行FIR<b class='flag-5'>滤波</b>器MATLAB与<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>

    串行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的串行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了简单的优化,并进
    的头像 发表于 05-24 10:56 609次阅读
    串行FIR<b class='flag-5'>滤波</b>器MATLAB与<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>