基于FPGA的火焰RGB分割(二值化)

文章目录

前言

使用matlab,提取图片中的RGB分量,并设定阈值,转换成TXT文件,编写verilog程序,利用txt文件数据转换成二值化的txt数据,最后重新生成图片。


提示:以下是本篇文章正文内容,下面案例可供参考

一、matlab火焰rgb分割

clc;
clear all;
I2=imread('12.jpg');
I=double(I2);               %将读入的数据转换成double类型
R=I(:,:,1);                 %提取红色分量
G=I(:,:,2);                 %提取绿色分量
B=I(:,:,3);                 %提取蓝色分量

[m,n,p]=size(I);
I1 = [];
% 实现图像的RGB检测,把符合RGB判据的素点置为1,否则置为0,返回的是只有0和1的二值化模板。
for i=1:m
    for j=1:n
            if (输入判断条件)%判断是否输入火焰RGB颜色正交特征
                I1(i,j) = 1;   %属于火焰特征设置像素点为白
            else
                I1(i,j) = 0;     %不属于火焰特征设置像素点为黑
            end
    end
end
% I1 = (R+G+B)/3, 100<I1<150,I2 =(R-B)/2, 15<I2<120
figure
imshow(I1)
title('二值化结果')

se1 = strel('disk',2);
f1 = imclose(I1,se1);
[L,num]=bwlabel(f1);
STATS = regionprops(L,'BoundingBox');
%%
figure                   
imshow(I2)
hold on
rectangle('Position',STATS(1).BoundingBox,'EdgeColor','r','LineWidth',2); 
title('基于RGB特征的火焰分割')

二、verilog程序

1.设计文件

使用matlab程序读取rgb的三个分量,并保存至txt文件中并编写设计文件。

2.仿真文件

代码如下(示例):

`timescale 1ns/1ps
module  RGB_deteciton_tb;

    reg                 sys_clk;
    reg                    sys_rst_n;

    reg      [4:0]      R_image;
    reg      [5:0]      G_image;
    reg      [4:0]      B_image;
    reg                 pi_flag;

    wire     [1:0]         b2w_seg;
    wire                po_flag;

    reg     [7:0]            rgb_data_mem [413100:0];
    reg     [18:0]            addr;
     
    integer                fid;
    initial                 fid=$fopen("rgb_data_out.txt");

    always @ (posedge sys_clk,negedge sys_rst_n)
    begin
        if(po_flag==1'b1)
            $fdisplay(fid,"%d",b2w_seg);
    end

    initial    sys_clk=0;
    always #10 sys_clk=~sys_clk;
    initial $readmemh("rgb_data.txt",rgb_data_mem);

initial begin
        sys_rst_n=0;
        R_image = 0;
        G_image = 0;
        B_image = 0;
        pi_flag=0;
        addr=0;
        #105;
        sys_rst_n=1;

    repeat (137700) begin
        @(posedge sys_clk);
        #2;
        R_image = rgb_data_mem[0 + addr];
        G_image = rgb_data_mem[1 + addr];
        B_image = rgb_data_mem[2 + addr];
        pi_flag=1;
        #5;
        addr=addr+3;
    end
    
        @(posedge sys_clk);
        #2;
        R_image = 0;
        G_image = 0;
        B_image = 0;
        pi_flag=0;
    
        #200;
        $fclose(fid);
        $stop;
end

//inst
RGB_detection  RGB_detection_inst(
. sys_clk                        (sys_clk),
. sys_rst_n                      (sys_rst_n),

. pi_flag                        (pi_flag),
. R_image                        (R_image),                                  
. G_image                        (G_image),
. B_image                        (B_image),

. po_flag                        (po_flag),
. b2w_seg                        (b2w_seg)                                  
);

endmodule 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值