<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何使用OpenCV實現(xiàn)圖像均衡???

          共 6118字,需瀏覽 13分鐘

           ·

          2021-05-05 10:20

          點擊上方小白學視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達

          我們已經(jīng)練習了很多圖像處理——操作圖像(精確地說是圖像矩陣)。為此,我們探索了圖像的均衡方法,以便在一定程度上增強對比度,以使被處理的圖像看起來比原始圖像更好,這種技術稱為直方圖均衡化。


          通常,發(fā)生的情況是在捕獲圖像時,它與自然視圖并不相同。為了滿足自然視圖的水平,應進行后處理。因此,直方圖均衡化(歸一化)是通過調(diào)整圖像的像素值來增強對比度的技術之一。


          可以在下面看到一個示例:原始圖像和均等圖像。

          如果我們要繪制圖像直方圖,它將看起來像下面的樣子:

          直方圖均衡化的重要性


          1. 該方法對于亮和暗圖像都效果更好,特別是在醫(yī)學領域中,分析X射線圖像的重要性更高。
          2. 在查看科學圖像(例如熱圖像和衛(wèi)星圖像)時也非常有用。


          執(zhí)行步驟


          在本文中,我們將通過使用openCV庫以及使用justNumPy和從頭開始實現(xiàn)此方法Matplotlib。盡管我們想不使用來做NumPy,但要花很多時間才能計算出來。


          添加依賴庫

          import numpy as npimport cv2import jsonfrom matplotlib import pyplot as plt


          讀取圖像
          def read_this(image_file, gray_scale=False):    image_src = cv2.imread(image_file)    if gray_scale:        image_src = cv2.cvtColor(image_src, cv2.COLOR_BGR2GRAY)    else:        image_src = cv2.cvtColor(image_src, cv2.COLOR_BGR2RGB)    return image_src

          上面的函數(shù)讀取gray_scale或中的圖像,RGB然后返回圖像矩陣。


          用庫實現(xiàn)代碼


          為了均衡,我們可以簡單地使用equalizeHist()庫中可用的方法cv2。

          1.讀入圖像時RGB。

          • 根據(jù)顏色組合分離像素。我們可以使用split()庫中可用的方法cv2。

          • 對每個矩陣應用均衡方法。

          • 將均衡的圖像矩陣與merge()庫中可用的方法合并在一起cv2。

          2.讀入圖像時gray_scale。

          3.繪制原始圖像和均衡圖像。


          def equalize_this(image_file, with_plot=False, gray_scale=False):    image_src = read_this(image_file=image_file, gray_scale=gray_scale)    if not gray_scale:        r_image, g_image, b_image = cv2.split(image_src)
          r_image_eq = cv2.equalizeHist(r_image) g_image_eq = cv2.equalizeHist(g_image) b_image_eq = cv2.equalizeHist(b_image)
          image_eq = cv2.merge((r_image_eq, g_image_eq, b_image_eq)) cmap_val = None else: image_eq = cv2.equalizeHist(image_src) cmap_val = 'gray'
          if with_plot: fig = plt.figure(figsize=(10, 20))
          ax1 = fig.add_subplot(2, 2, 1) ax1.axis("off") ax1.title.set_text('Original') ax2 = fig.add_subplot(2, 2, 2) ax2.axis("off") ax2.title.set_text("Equalized")
          ax1.imshow(image_src, cmap=cmap_val) ax2.imshow(image_eq, cmap=cmap_val) return True return image_eq

          代碼測試
          equalize_this(image_file='lena_original.png', with_plot=True)


          equalize_this(image_file = 'lena_original.png',with_plot = True,gray_scale = True


          實現(xiàn)代碼


          為此,我們正在使用NumPy所有矩陣運算。同樣,我們可以使用for循環(huán)來執(zhí)行此操作,但是它將花費更多的時間進行計算。即使在這里,我們也有兩個方面:

          1.讀入圖像時RGB。

          • 根據(jù)顏色組合分離像素。我們可以使用NumPy操作將其切細。

          • 對每個矩陣應用均衡方法。

          • 將均衡的圖像矩陣與dstack(tup=())庫中可用的方法合并在一起NumPy。

          2.讀入圖像時gray_scale。

          3.繪制原始圖像和均衡圖像。


          讓我們編寫我們自己的函數(shù)來計算圖像均衡,圖像像素值通常在0到255之間。因此,總共有256個像素。

          def enhance_contrast(image_matrix, bins=256):    image_flattened = image_matrix.flatten()    image_hist = np.zeros(bins)
          # frequency count of each pixel for pix in image_matrix: image_hist[pix] += 1
          # cummulative sum cum_sum = np.cumsum(image_hist) norm = (cum_sum - cum_sum.min()) * 255 # normalization of the pixel values n_ = cum_sum.max() - cum_sum.min() uniform_norm = norm / n_ uniform_norm = uniform_norm.astype('int')
          # flat histogram image_eq = uniform_norm[image_flattened] # reshaping the flattened matrix to its original shape image_eq = np.reshape(a=image_eq, newshape=image_matrix.shape)
          return image_eq

          當將原始圖像矩陣作為參數(shù)傳遞時,上述函數(shù)將返回一個均衡的圖像矩陣。

          讓我們編寫另一個函數(shù),該函數(shù)為RGB圖像和gray_scale使用上述功能的圖像計算均衡。


          def equalize_this(image_file, with_plot=False, gray_scale=False, bins=256):    image_src = read_this(image_file=image_file, gray_scale=gray_scale)    if not gray_scale:        r_image = image_src[:, :, 0]        g_image = image_src[:, :, 1]        b_image = image_src[:, :, 2]
          r_image_eq = enhance_contrast(image_matrix=r_image) g_image_eq = enhance_contrast(image_matrix=g_image) b_image_eq = enhance_contrast(image_matrix=b_image)
          image_eq = np.dstack(tup=(r_image_eq, g_image_eq, b_image_eq)) cmap_val = None else: image_eq = enhance_contrast(image_matrix=image_src) cmap_val = 'gray'
          if with_plot: fig = plt.figure(figsize=(10, 20))
          ax1 = fig.add_subplot(2, 2, 1) ax1.axis("off") ax1.title.set_text('Original') ax2 = fig.add_subplot(2, 2, 2) ax2.axis("off") ax2.title.set_text("Equalized")
          ax1.imshow(image_src, cmap=cmap_val) ax2.imshow(image_eq, cmap=cmap_val) return True return image_eq
          代碼測試
          equalize_this(image_file='lena_original.png', with_plot=True)

          equalize_this(image_file='lena_original.png', with_plot=True, gray_scale=True)


          總結


          • 我們探索和實施不同的方法來增加圖像強度,從而學到了很多東西。特別是,嘗試通過引用和學習從頭實現(xiàn)代碼。

          • 使用庫方法始終是一件好事,因為它們似乎更加優(yōu)化并且可以100%工作。

          • 圖像處理是一門非常重要的學科,確實值得嘗試,要有很多好奇心和自己的探索。

          — — 完 — — 


          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學視覺公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學視覺公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日日夜夜撸一撸 | 无码啪啪| 成人91久久 | 免费黄片在线 | 国产做a爱一级毛片久久 |