<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)圖像均衡???

          共 4514字,需瀏覽 10分鐘

           ·

          2021-05-13 07:33

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


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


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

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

          直方圖均衡化的重要性


          1. 該方法對于亮和暗圖像都效果更好,特別是在醫(yī)學(xué)領(lǐng)域中,分析X射線圖像的重要性更高。
          2. 在查看科學(xué)圖像(例如熱圖像和衛(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。

          • 對每個矩陣應(yīng)用均衡方法。

          • 將均衡的圖像矩陣與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í)行此操作,但是它將花費更多的時間進(jìn)行計算。即使在這里,我們也有兩個方面:

          1.讀入圖像時RGB。

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

          • 對每個矩陣應(yīng)用均衡方法。

          • 將均衡的圖像矩陣與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

          當(dāng)將原始圖像矩陣作為參數(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)


          總結(jié)


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

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

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


          ?------------------------------------------------


          雙一流高校研究生團(tuán)隊創(chuàng)建 ↓

          專注于計算機(jī)視覺原創(chuàng)并分享相關(guān)知識 ?


          整理不易,點贊三連!

          瀏覽 48
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  超碰福利在线 | 青青青青青青操 | 久久国产精品伦子伦 | 成人黄网站在线观看 | 奇米影视狠狠 |