精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的直方圖拉伸方案

FPGA之家 ? 來源:FPGA開源工作室 ? 2023-05-04 09:38 ? 次閱讀

1背景知識

視頻處理中,為了能夠實時調節圖像的對比對,通常需要對直方圖進行拉伸處理。直方圖拉伸是指將圖像灰度直方圖較窄的灰度級區間向兩端拉伸,增強整幅圖像像素的灰度級對比度,達到增強圖像的效果。

常用的直方圖拉伸方法有線性拉伸、3段式分段線性拉伸和非線性拉伸等。FPGA中常見的是線性拉伸。

線性拉伸就是灰度拉伸,屬于線性點運算的一種。它擴展圖像的直方圖,使其充滿整個灰度級范圍內。

設f(x,y)為輸入圖像,它的最小灰度級A和最大灰度級B的定義如下:

A=min[f(x,y)];

B=max[f(x,y)];

將A和B分別映射到0和255,則最終的輸出圖像g(x,y)為

g(x,y)=255*[f(x,y)-A]/(B-A)

e20d8aca-e87e-11ed-ab56-dac502259ad0.jpg

e21dc2dc-e87e-11ed-ab56-dac502259ad0.jpg

如上圖所示,上a和下a分別為未進行拉伸的原始圖像和直方圖,上b和下b為拉伸后的圖像和直方圖。很容易發現直方圖分布較窄的a圖像經過拉伸后直方圖變寬而且對比度明顯提高。

2 matlab實現直方圖拉伸

closeall

clearall;

clc;

I = imread('car0.bmp');

Igray = rgb2gray(I);

Imin=min(min(Igray));

Imax=max(max(Igray));

HW = size(Igray);

H =HW(1);

W =HW(2);

C =255/(Imax-Imin);

Inew = zeros(size(Igray));

fori=1:H

forj=1:W

if(Igray(i,j)==Imin)

Inew(i,j)=0;

elseif(Igray(i,j)==Imax)

Inew(i,j)=255;

else

Inew(i,j)=(C.*(Igray(i,j)-Imin));

end

end

end

Inew = uint8(Inew);

figure(1),

subplot(221),imshow(Igray);

title('Igray');

subplot(223),imshow(Inew);

title('Inew');

subplot(222),imhist(Igray);

title('Igray');

subplot(224),imhist(Inew);

title('Inew');

e230f280-e87e-11ed-ab56-dac502259ad0.jpg

Matlab實現彩色圖像拉伸

close all
clear all;
clc;
 
I = imread('lena.jpg');
Istretch=HistRGB(I);
 
figure(1),
subplot(211),imshow(I);
title('I');
subplot(212),imshow(Istretch);
title('Istretch');

function [OUT] = HistRGB(I)
    for i = 1:3
        I(:,:,i) = HistGray(I(:,:,i));
    end
    OUT = uint8(I);
end

function [Inew] = HistStretch(Igray)
Imin=min(min(Igray));
Imax=max(max(Igray));
 
HW = size(Igray);
H =HW(1);
W =HW(2);
C =255/(Imax-Imin);
Inew = zeros(size(Igray));
for i=1:H
   for j=1:W
       if(Igray(i,j)==Imin)
           Inew(i,j)=0;
       elseif(Igray(i,j)==Imax)
           Inew(i,j)=255;
       else
           Inew(i,j)=(C.*(Igray(i,j)-Imin));
       end
   end
end
Inew = uint8(Inew);
end

3 FPGA實現灰度圖像拉伸

FPGA實現灰度圖像的拉伸可分為真拉伸和偽拉伸,真拉伸需要對圖像進行一幀的緩存,偽拉伸其實是在前一幀計算出最大和最后灰度級的基礎上完成當前圖像的拉伸處理,這樣比較節省資源。

1,計算灰度圖像的最大最小灰度級A,B;

2,完成灰度圖像的拉伸。

/**********************************
copyright@FPGA OPEN SOURCE STUDIO
微信公眾號:FPGA開源工作室
***********************************/
//800*600 =  480000
//Pseudo histogram linear stretch
//Algorithm:g(x,y) = 255*(f(x,y)-A)/(B-A)
//B--Grayscale max
//A--Grayscale min
 
module hist_Stretch#(
       parameter DW = 24
      )(
      input                      pixelclk,
      input                      reset_n,
      input [DW-1:0]    din,//gray888
      input                      i_hsync,
      input                      i_vsync,
      input                      i_de,
  
  output [DW-1:0]dout,//gray out
      output                     o_hsync,
      output                     o_vsync,
      output                     o_de
   );
   
wire [7:0] gray = din[7:0];//gray--8bit
reg  [7:0] gray_r;
reg        vsync_r;
reg        hsync_r;
reg        de_r;
 
wire [7:0]gray_max;//gray max
wire [7:0]gray_min;//gray min
 
wire       vsync_pos = (i_vsync&(!vsync_r));//frame start
wire       vsync_neg = (!i_vsync&vsync_r);  //frame end
assign dout = {gray_r,gray_r,gray_r};
assign o_hsync = hsync_r;
assign o_vsync = vsync_r;
assign o_de = de_r;
 
always @(posedge pixelclk) begin
  vsync_r <= i_vsync;
  hsync_r <= i_hsync;
  de_r <= i_de;
end
 
always @(posedge pixelclk or negedge reset_n)begin
  if(reset_n == 1'b0) begin
gray_r<=0;
  end
  else begin
if(i_de ==1'b1) begin
  if(gray>gray_max)
    gray_r<=8'd255;
  else if(gray

/*
Module name:  minmax.v
Description:  Get the maximum and minimum gray level of a frame of image
              
Date:         2019/12/02
微信公眾號:    FPGA開源工作室
*/
`timescale 1ns/1ps
module minmax#(parameter DW = 8
      )(
      input                      pixelclk,
      input                      reset_n,
      input [DW-1:0]    din,//gray--8
      input                      i_hsync,
      input                      i_vsync,
      input                      i_de,
  
  output reg [DW-1:0]gray_max,//gray max out
  output reg  [DW-1:0]gray_min//gray min out
   );
 
reg [DW-1:0]gray_maxr;//gray max
reg [DW-1:0]gray_minr;//gray min
 
//reg  [7:0] gray_r;
reg        vsync_r;
reg de_r;
 
wire       vsync_pos = (i_vsync&(!vsync_r));//frame start
wire       vsync_neg = (!i_vsync&vsync_r);  //frame end
 
always @(posedge pixelclk) begin
  de_r <= i_de;
  vsync_r<=i_vsync;
end
 
always @(posedge pixelclk or negedge reset_n)begin
  if(!reset_n) begin
    gray_maxr<= 8'd0;
gray_minr<= 8'd255;
  end  
  else begin
    if(i_vsync ==1'b1 && i_de ==1'b1) begin
  gray_maxr<= (gray_maxr>din)?gray_maxr:din;
  gray_minr<= (din>gray_minr)?gray_minr:din;    
end
else if(vsync_neg == 1'b1)begin
  gray_max<= gray_maxr;
  gray_min<= gray_minr;
  gray_maxr<= 8'd0;
  gray_minr<= 8'd255;
end
else begin
  gray_max<= gray_max;
  gray_min<= gray_min;
  gray_maxr<= gray_maxr;
  gray_minr<= gray_minr;
end
  end
end
 
 
endmodule

未經拉伸的圖像感覺蒙了一層霧,經過拉伸后圖像對比度明顯增強。







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1626

    文章

    21678

    瀏覽量

    602040
  • matlab
    +關注

    關注

    182

    文章

    2963

    瀏覽量

    230195

原文標題:基于FPGA的直方圖拉伸

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于直方圖算法進行FPGA架構設計

    引言 直方圖統計在圖像增強和目標檢測領域有重要應用,比如直方圖均衡,梯度直方圖。直方圖的不同種類和統計方法請見之前的文章。本章就是用FPGA
    的頭像 發表于 12-10 16:37 ?2756次閱讀

    FPGA直方圖處理方法

    圖像直方圖用作數字圖像中色調分布的圖形表示。它繪制了每個色調值的像素數。通過查看特定圖像的直方圖,觀看者將能夠一目了然地判斷整個色調分布。
    的頭像 發表于 12-15 09:20 ?1034次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>直方圖</b>處理方法

    一文帶你了解FPGA直方圖操作

    灰度變換等處理過程。 而FPGA對于直方圖處理主要分為以下三種: 我們常見或者聽說的直方圖概念主要指直方圖均衡,這也是最簡單的一種方式,常見某些入門級的圖像處理書籍或者文章。
    發表于 01-10 15:07

    DSP國產教學實驗箱_嵌入式教程:5-7 直方圖均衡化

    對比度增強方法。直方圖拉伸直方圖均衡化是兩種最常見的間接對比度增強方法。直方圖拉伸是通過對比度拉伸直方圖進行調整,從而“擴大”前景和背景
    發表于 07-12 15:47

    圖像自適應分段線性拉伸算法的FPGA設計

    。1 自適應線性分段線性灰度級拉伸算法首先對紅外圖像做灰度直方圖統計,低信噪比條件下,選取壓縮因子為5%,將盲元和噪聲的影響降到最低。分別搜索5%最大灰度值中的最小值作為Xmax,5%最小灰度值里
    發表于 04-27 14:37

    基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

    亮度分布特性有力的工具,根據它的結果可以進行諸如灰度拉伸、自動對比度、動態伽馬調整等操作。圖1 Lena 圖像的灰度直方圖統計FPGA算法統計在計算機或者DSP 上實現直方圖統計時,我
    發表于 05-14 12:37

    FPGA圖像處理 直方圖統計并灰度拉伸 然后VGA顯示的問題

    本人目前用FPGA做一個圖像處理并VGA顯示的東西,中間用到直方圖統計并灰度拉伸,使圖像對比度提高?,F在遇到一個問題,取統計的5%和95%的灰度值作為閾值,當當前像素值來到的時候,以當前灰度值做一個
    發表于 06-28 09:35

    基于FPGA的圖像直方圖實時顯示

    ``基于FPGA的圖像直方圖實時顯示 AT7_Xilinx開發板(USB3.0+LVDS)資料共享 騰訊鏈接:https://share.weiyun.com/5GQyKKc 百度網盤鏈接
    發表于 07-12 17:33

    基于FPGA的圖像直方圖均衡處理

    `基于FPGA的圖像直方圖均衡處理 AT7_Xilinx開發板(USB3.0+LVDS)資料共享 騰訊鏈接:https://share.weiyun.com/5GQyKKc 百度網盤鏈接:https
    發表于 07-14 17:26

    TI C6000教學實驗箱操作教程:5-8 直方圖均衡化(LCD顯示)

    是間接對比度增強方法。直方圖拉伸直方圖均衡化是兩種最常見的間接對比度增強方法。直方圖拉伸是通過對比度拉伸直方圖進行調整,從而“擴大”前景
    發表于 12-07 14:20

    基于直方圖變換的LED背光源節電調光方法

    摘要: 背光源的功耗最高可占液晶顯示模組總功耗的50%以上,文章提出一種基于直方圖變換的背光源節電調光方法,在ARM 平臺上通過直方圖的裁剪、搬移和拉伸對圖像進行處理,其后
    發表于 07-19 15:41 ?2584次閱讀
    基于<b class='flag-5'>直方圖</b>變換的LED背光源節電調光方法

    基于直方圖算法的FPGA設計架構

    直方圖統計在圖像增強和目標檢測領域有重要應用,比如直方圖均衡,梯度直方圖。直方圖的不同種類和統計方法請見之前的文章。本章就是用FPGA來進行
    發表于 04-20 10:47 ?1177次閱讀
    基于<b class='flag-5'>直方圖</b>算法的<b class='flag-5'>FPGA</b>設計架構

    剖析FPGA灰度直方圖線性拉伸

    純工程師社群 直方圖線性拉伸相對于直方圖均衡化來說就更好理解一些了,即用線性變化將灰度直方圖較窄的部分拉伸至整個區間,增強整幅圖像的對比度。
    的頭像 發表于 07-02 10:37 ?3081次閱讀
    剖析<b class='flag-5'>FPGA</b>灰度<b class='flag-5'>直方圖</b>線性<b class='flag-5'>拉伸</b>

    基于FPGA直方圖線性拉伸的解決方案與對比分析

    但是實際應用中并不會直接采用上述的A和B,這是由于圖像中可能存在噪聲的原因。想象如果圖像中存在幾個純白點(255)和純黑點(0),那么拉伸后的效果就無法達到預期。
    的頭像 發表于 07-02 10:38 ?2192次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>直方圖</b>線性<b class='flag-5'>拉伸</b>的解決<b class='flag-5'>方案</b>與對比分析

    基于FPGA灰度直方圖線性拉伸

    但是實際應用中并不會直接采用上述的A和B,這是由于圖像中可能存在噪聲的原因。想象如果圖像中存在幾個純白點(255)和純黑點(0),那么拉伸后的效果就無法達到預期。
    的頭像 發表于 06-08 10:15 ?2432次閱讀