RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么不能直接對RGB圖做直方圖均衡化

FPGA開源工坊 ? 來源:FPGA開源工坊 ? 2024-01-02 09:41 ? 次閱讀

相信好多人在開始學(xué)習(xí)FPGA圖像處理的時候都是接觸的RGB轉(zhuǎn)灰度圖,Sobel圖像檢測,直方圖均衡化這樣的算法。

然后在做直方圖均衡化的時候也是要先RGB轉(zhuǎn)灰度,然后再對灰度圖進(jìn)行直方圖均衡化,網(wǎng)上的課程也大多數(shù)都是這樣做的,不知道大家會不會產(chǎn)生一個疑問就不能直接對RGB圖做直方圖均衡化嗎?

首先說答案是不可以的。

我們來看看為什么。

先來看一段簡單的代碼:

img = cv2.imread(r'E:python_image_simpythonProjectsimimgimg.png')


equ=cv2.equalizeHist(img)


cv2.imshow('bgr', img)
cv2.waitKey()
cv2.destroyAllWindows()

讀取一張圖片,然后對其做直方圖均衡化,很簡單,但是OpenCV報錯了。

edd2b562-a703-11ee-8b88-92fbcf53809c.png

報錯說直方圖均衡化這個函數(shù)的參數(shù)應(yīng)該是CV_8UC1,那么我們將RGB通道給分離出來分別進(jìn)行直方圖均衡化不就好了嗎,說干就干。

img = cv2.imread(r'E:python_image_simpythonProjectsimimgimg.png')


b, g, r = cv2.split(img)
equ_b = cv2.equalizeHist(b)
equ_g = cv2.equalizeHist(g)
equ_r = cv2.equalizeHist(r)
equ = cv2.merge([equ_b, equ_g, equ_r])
cv2.imshow('bgr', img)
cv2.imshow('bgr_equ', equ)
cv2.waitKey()
cv2.destroyAllWindows()

上述代碼將BGR通道進(jìn)行了分離,然后分別進(jìn)行直方圖均衡化,最后再將結(jié)果給合并起來。

ps:opencv讀取的圖片默認(rèn)是BGR格式的,而不是RGB格式的。

來看看效果吧。

一個原圖,一個效果圖,可以發(fā)現(xiàn)效果很差,把我們原先的色彩都給打亂了。特別是圖像的上半部分直接顏色都變了。

那么這是為啥呢。

這個就需要了解一下什么是色彩空間了。

色彩是一種感性的認(rèn)識,科學(xué)家們?yōu)榱巳ケ硎旧示桶l(fā)明了許多的色彩空間,比如RGB,YUV,HSV,HSI,HSL等多種表示方式,每一種使用范圍也不太一樣。

比如RGB色彩空間把圖像用紅色,綠色,藍(lán)色來表示,但是這種色彩空間把圖像的亮度和色度混在了一起進(jìn)行表示,也就是不區(qū)分luma和chroma 的值,這樣在對其中某一個進(jìn)行變換的時候就會把另外一個也進(jìn)行了變換。比如在進(jìn)行直方圖均衡化的時候是對luma進(jìn)行操作的,由于RGB混在一起的表示形式就會把chroma也給搞亂掉,這樣就表現(xiàn)出來了上圖的效果。

如果是對圖像進(jìn)行線性變換的話還能恢復(fù)過來,如果是非線性的變化那豈不是搞不回來了,把另外一個徹底搞亂掉了。

而YUV色彩空間用Y來表示亮度,用UV表示色度,這樣單獨對Y通道進(jìn)行直方圖均衡化就可以了,不會對色度產(chǎn)生影響。

import cv2


img = cv2.imread(r'E:python_image_simpythonProjectsimimgimg.png')


y, u, v = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2YUV))


b, g, r = cv2.split(img)
equ_b = cv2.equalizeHist(b)
equ_g = cv2.equalizeHist(g)
equ_r = cv2.equalizeHist(r)
equ_y = cv2.equalizeHist(y)
yuv = cv2.merge([equ_y, u, v])
yuv = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR)


equ = cv2.merge([equ_b, equ_g, equ_r])


# stacking images side-by-side
cv2.imshow('rgb', img)
cv2.imshow('bgr_equ', equ)
cv2.imshow('yuv_equ',yuv)
cv2.waitKey()
cv2.destroyAllWindows()









上述代碼將BGR色彩空間轉(zhuǎn)為YUV,然后對Y通道進(jìn)行直方圖均衡化,最后再轉(zhuǎn)回BGR色彩空間。

來看看效果圖。

直方圖均衡化后比直接RGB直方圖的效果要好很多。

最后這個對比圖是通過matplotlib畫出來的,需要注意的是matplotlib默認(rèn)是RGB模式的,所以需要將BGR轉(zhuǎn)為RGB才能正常顯示出來。

import matplotlib.pyplot as plt


img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
equ = cv2.cvtColor(equ, cv2.COLOR_BGR2RGB)
yuv = cv2.cvtColor(yuv, cv2.COLOR_BGR2RGB)
plt.figure()
plt.subplot(1, 3, 1)
plt.imshow(img)
plt.title("img")
plt.subplot(1, 3, 2)
plt.imshow(equ)
plt.title("bgr_equ")
plt.subplot(1, 3, 3)
plt.title("yuv_euq")
plt.imshow(yuv)


plt.show()

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21729

    瀏覽量

    602977
  • 圖像處理
    +關(guān)注

    關(guān)注

    27

    文章

    1289

    瀏覽量

    56722
  • RGB
    RGB
    +關(guān)注

    關(guān)注

    4

    文章

    798

    瀏覽量

    58461
  • 直方圖
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    7882

原文標(biāo)題:FPGA圖像處理--為什么不直接對RGB圖像做處理呢?

文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    DSP國產(chǎn)教學(xué)實驗箱_嵌入式教程:5-7 直方圖均衡

    一、實驗?zāi)康?學(xué)習(xí)直方圖均衡的原理,掌握圖像的讀取方法,并實現(xiàn)直方圖均衡,增強圖片效果。 二
    發(fā)表于 07-12 15:47

    急求直方圖均衡的Verilog代碼或者是FPGA上算法處理的資料,多謝了

    急求直方圖均衡的Verilog代碼或者是FPGA上算法處理的資料,多謝了
    發(fā)表于 06-02 17:51

    使用LabVIEW編程實現(xiàn)直方圖均衡

    使用LabVIEW編程實現(xiàn)直方圖均衡
    發(fā)表于 11-13 20:24

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

    的請求,并驅(qū)動液晶顯示器顯示視頻圖像。本實例除了前面提到對原始圖像DDR3緩存和顯示,還會在原始圖像緩存到DDR3之前,會對當(dāng)前圖像直方圖統(tǒng)計(以幀為單位統(tǒng)計),統(tǒng)計后的
    發(fā)表于 07-14 17:26

    【干貨】基于FPGA的圖像處理(圖像增強)之直方圖均衡

    什么呢?是增強圖像的對比度。先來看下在Matlab中實現(xiàn)直方圖均衡的效果吧。圖片比較隨意,直接對電腦桌面截了一張,大家應(yīng)該能有一個直觀的感受,知道
    發(fā)表于 12-08 09:40

    玩轉(zhuǎn)Zynq連載47——[ex66] MT9V034攝像頭的圖像直方圖均衡處理

    圖像緩存到DDR3之前,會對當(dāng)前圖像直方圖統(tǒng)計(以幀為單位統(tǒng)計),統(tǒng)計后的直方圖結(jié)果進(jìn)行均衡運算,獲得新的圖像映射數(shù)據(jù),然后用于緊隨著的
    發(fā)表于 01-02 09:25

    labview直方圖均衡化時閾值跟隨圖像灰度值范圍變化的部分如何編寫?

    在做直方圖均衡化時要對圖像灰度處理,如何選取圖中灰度值集中的部分做均衡?將這個范圍做為處理的上下閾值。希望大家都來發(fā)表自己的想法。
    發(fā)表于 04-28 20:16

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

    一、實驗?zāi)康?學(xué)習(xí)直方圖均衡的原理,掌握圖像的讀取方法,并實現(xiàn)在LCD上顯示直方圖均衡前后的
    發(fā)表于 12-07 14:20

    保持圖像細(xì)節(jié)的直方圖均衡算法

    對常規(guī)的直方圖均衡算法進(jìn)行了改進(jìn),避免了不同灰度的像素均衡后被合并、圖像細(xì)節(jié)丟失等現(xiàn)象。實驗結(jié)果表明,改進(jìn)的直方圖均衡新算法既能充分增強圖像
    發(fā)表于 11-09 16:50 ?21次下載

    RGB三色直方圖的繪制

    《OpenCV3編程入門》書本配套源代碼:RGB三色直方圖的繪制
    發(fā)表于 06-06 15:20 ?17次下載

    直方圖均衡_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:直方圖均衡
    發(fā)表于 06-06 15:52 ?6次下載

    直方圖均衡_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-直方圖均衡,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:15 ?2次下載

    MATLAB如何實現(xiàn)圖像增強灰度變換直方圖均衡匹配

    的四種灰度變換;使用 MATLAB 自帶的 imadjust 函數(shù);以及直方圖均衡和規(guī)定(匹配)處理的圖像增強方法。
    發(fā)表于 01-13 21:56 ?1.1w次閱讀
    MATLAB如何實現(xiàn)圖像增強灰度變換<b class='flag-5'>直方圖</b><b class='flag-5'>均衡</b>匹配

    直方圖均衡的原理及OpenCV的算法和代碼實現(xiàn)免費下載

    直方圖均衡是想把左邊的直方圖變換為右邊的直方圖,使各個灰度值上的像素個數(shù)均勻分布,這樣圖像整體的亮度分布較均勻,不會過亮或過暗,同時可以增
    發(fā)表于 09-25 11:10 ?8次下載
    <b class='flag-5'>直方圖</b><b class='flag-5'>均衡</b><b class='flag-5'>化</b>的原理及OpenCV的算法和代碼實現(xiàn)免費下載

    直接灰度變換和直方圖均衡的數(shù)字圖像處理實驗資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是直接灰度變換和直方圖均衡的數(shù)字圖像處理實驗資料免費下載。
    發(fā)表于 12-23 08:00 ?3次下載
    <b class='flag-5'>直接</b>灰度變換和<b class='flag-5'>直方圖</b><b class='flag-5'>均衡</b>的數(shù)字圖像處理實驗資料免費下載
    RM新时代网站-首页