zoukankan      html  css  js  c++  java
  • 11浮雕画

    一、实战原理

    与上一个实战类似,只不过这里的浮雕图像处理公式为:NewPixel(i,j)=Pixel(i,j+1)-Pixel(i,j)+value。

    二、matlab实现

    这里的阈值value设置为80。

    %--------------------------------------------------------------------------
    %                         浮雕画
    %--------------------------------------------------------------------------
    clc;
    clear all;
    RGB = imread('G:	est11 embossimage.jpg');   %读取图像
    gray = rgb2gray(RGB);      %灰度图
    
    [ROW,COL,N] = size(gray);  %获得图像尺寸[高度,长度,维度]
    emboss = zeros(ROW,COL);
    value = 100;
    
    for i = 1:ROW
        for j=1:COL-1
            emboss(i,j) = gray(i,j+1) - gray(i,j) + value;
            if emboss(i,j) > 255
                 emboss(i,j) = 255;
            elseif emboss(i,j) < 0
                emboss(i,j) = 0;
            else
                emboss(i,j) = emboss(i,j);
            end
        end
    end
    emboss = uint8(emboss);
    
    subplot(2,1,1);imshow(gray);  title('Y分量灰度图');
    subplot(2,1,2);imshow(emboss);title('浮雕画');
    View Code

    matlab效果:

     三、fpga实现:

    关键代码:NewPixel(i,j)=Pixel(i,j+1)-Pixel(i,j)+value,公式中Pixel(i,j)就是打拍得到的Y2_r。

    reg [7:0]Y2_r;
    wire [7:0]emboss;
    always @(posedge clk_33M or negedge sys_rst_n) begin
        if(!sys_rst_n) begin
            Y2_r <= 8'd0;
        end
        else begin
            Y2_r <= Y2;
        end
    end
    assign emboss = Y2 - Y2_r + value; //-255 ~ 510
    
    always @(posedge clk_33M or negedge sys_rst_n)begin
    if(!sys_rst_n)
    emboss_data<=16'h0000;
    else if(emboss > 255)
    emboss_data<=16'hffff;
    else if(emboss < 0)
    emboss_data<=16'h0000;
    else 
    emboss_data<={emboss[7:3],emboss[7:2],emboss[7:3]};
    end

    上面的代码延迟了两个clk才输出数据,因此把行信号和列信号进行同步处理。

     信号同步处理:也与数据输出一样,延迟两拍再输出。

    reg o_hs_r0;
    reg o_hs_r1;
    reg o_vs_r0;
    reg o_vs_r1;
    always @(posedge clk_33M)begin
    o_hs_r0<=o_hs;
    o_vs_r0<=o_vs;
    
    o_hs_r1<=o_hs_r0;
    o_vs_r1<=o_vs_r0;
    end
    
    assign emboss_hs=o_hs_r1;
    assign emboss_vs=o_vs_r1;

    fpga效果:不知道是不是信号同步的问题,屏幕显示有两个问题:一个是fpga的阈值90才与matlab阈值80的图像一样,另一个问题是画面边沿有一条白色。 

     

  • 相关阅读:
    网络配置
    yum源配置
    linux压缩命令
    linux下创建和删除软、硬链接
    linux挂载光盘
    Linux-chmod_命令的详细用法讲解
    linux_rpm命令
    Linux_Vi_命令
    anglarJs前端控制器的继承
    angularJs分层服务开发
  • 原文地址:https://www.cnblogs.com/FPGAer/p/14113609.html
Copyright © 2011-2022 走看看