1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python圖像處理介紹--彩色圖像的直方圖處理

        共 4918字,需瀏覽 10分鐘

         ·

        2021-01-01 01:16


        點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達(dá)

        引言


        在昨天的文章中我們介紹了基于灰度圖像的直方圖處理,也簡單的提到了彩色圖像的直方圖處理,但是沒有討論最好的方法。


        讓我們從導(dǎo)入所有需要的庫開始吧!

        import numpy as npimport matplotlib.pyplot as pltfrom skimage.io import imread, imshowimport matplotlib.pyplot as pltfrom skimage.exposure import histogram, cumulative_distributionfrom scipy.stats import norm

        現(xiàn)在讓我們載入圖像。

        dark_image = imread('dark_books.png');plt.figure(num=None, figsize=(8, 6), dpi=80)imshow(dark_image);

        為了幫助我們更好地了解此圖像中的 RGB 圖層,讓我們隔離每個單獨的通道。

        def rgb_splitter(image):    rgb_list = ['Reds','Greens','Blues']    fig, ax = plt.subplots(1, 3, figsize=(17,7), sharey = True)    for i in range(3):        ax[i].imshow(image[:,:,i], cmap = rgb_list[i])        ax[i].set_title(rgb_list[i], fontsize = 22)        ax[i].axis('off')    fig.tight_layout()rgb_splitter(dark_image)

        現(xiàn)在我們已經(jīng)對單個顏色通道有了大致的了解,現(xiàn)在查看它們的CDF。

        def df_plotter(image):    freq_bins = [cumulative_distribution(image[:,:,i]) for i in                 range(3)]    target_bins = np.arange(255)    target_freq = np.linspace(0, 1, len(target_bins))    names = ['Red', 'Green', 'Blue']    line_color = ['red','green','blue']    f_size = 20        fig, ax = plt.subplots(1, 3, figsize=(17,5))    for n, ax in enumerate(ax.flatten()):        ax.set_title(f'{names[n]}', fontsize = f_size)        ax.step(freq_bins[n][1], freq_bins[n][0], c=line_color[n],                label='Actual CDF')        ax.plot(target_bins,              target_freq,              c='gray',              label='Target CDF',             linestyle = '--')df_plotter(dark_image)

        正如我們所看到的,這三個通道都離理想化的直線相當(dāng)遠(yuǎn)。為了解決這個問題,讓我們簡單地對其CDF進(jìn)行插值。

        def rgb_adjuster_lin(image):        target_bins = np.arange(255)    target_freq = np.linspace(0, 1, len(target_bins))    freq_bins = [cumulative_distribution(image[:,:,i]) for i in                  range(3)]    names = ['Reds', 'Blues', 'Greens']    line_color = ['red','green','blue']    adjusted_figures = []    f_size = 20        fig, ax = plt.subplots(1,3, figsize=[15,5])    for n, ax in enumerate(ax.flatten()):        interpolation = np.interp(freq_bins[n][0], target_freq,                                   target_bins)        adjusted_image = img_as_ubyte(interpolation[image[:,:,                                       n]].astype(int))        ax.set_title(f'{names[n]}', fontsize = f_size)        ax.imshow(adjusted_image, cmap = names[n])        adjusted_figures.append([adjusted_image])    fig.tight_layout()    fig, ax = plt.subplots(1,3, figsize=[15,5])    for n, ax in enumerate(ax.flatten()):        interpolation = np.interp(freq_bins[n][0], target_freq,                                   target_bins)        adjusted_image = img_as_ubyte(interpolation[image[:,:,                                       n]].astype(int))        freq_adj, bins_adj = cumulative_distribution(adjusted_image)                ax.set_title(f'{names[n]}', fontsize = f_size)        ax.step(bins_adj, freq_adj, c=line_color[n], label='Actual                 CDF')        ax.plot(target_bins,                 target_freq,                 c='gray',                 label='Target CDF',                linestyle = '--')    fig.tight_layout()    return adjusted_figureschannel_figures = return adjusted_figures

        我們看到每個顏色通道都有顯著改善。


        此外,請注意上面的函數(shù)是如何將所有這些值作為列表返回。這將為我們的最后一步提供很好的幫助,將所有這些重新組合成一張圖片。為了讓我們更好地了解如何做到這一點,讓我們檢查一下我們的列表。

        print(channel_figures)print(f'Total Inner Lists : {len(channel_figures)}')

        我們看到在變量channel_figures中有三個列表。這些列表代表RGB通道的值。在下面,我們可以將所有這些值重新組合在一起。

        plt.figure(num=None, figsize=(10, 8), dpi=80)imshow(np.dstack((channel_figures[0][0],                   channel_figures[1][0],                   channel_figures[2][0])));

        請注意圖像處理前后這種差異是多么顯著。圖像不僅明亮了許多,黃色的陰影也被移除了。讓我們在不同的圖像上進(jìn)行同樣的處理試試。

        dark_street = imread('dark_street.png');plt.figure(num=None, figsize=(8, 6), dpi=80)imshow(dark_street);

        現(xiàn)在我們已經(jīng)加載了新的圖片,讓我們簡單地通過函數(shù)來處理。

        channel_figures_street = adjusted_image_data = rgb_adjuster_lin(dark_street)

        plt.figure(num=None, figsize=(10, 8), dpi=80)imshow(np.dstack((channel_figures_street [0][0],                   channel_figures_street [1][0], ??????????????????channel_figures_street?[2][0])));

        我們可以看到驚人的變化。不可否認(rèn),這張照片曝光有點過度。這可能是因為后面有明顯的霓虹燈。在以后的文章中,我們將學(xué)習(xí)如何微調(diào)我們的方法,以使我們的函數(shù)更加通用。


        總結(jié)


        在本文中,我們學(xué)習(xí)了如何調(diào)整每個RGB通道以保留圖像的顏色信息。這種技術(shù)是對以前的灰度調(diào)整方法的重大改進(jìn)。


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

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

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

        下載4:leetcode算法開源書
        小白學(xué)視覺公眾號后臺回復(fù):leetcode,即可下載。每題都 runtime beats 100% 的開源好書,你值得擁有!




        交流群


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


        瀏覽 74
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天日天天干天天撸 | 欧美第一区第二区韩国视频在线观看 | AV豆花亚洲 | 巨爆乳幕巨爆乳熟女电影 | 国产毛片精品一区二区色欲黄A片 | 摸逼综合网 | 亚洲7777 | 极品留学生与老外啪啪 | 亚洲成人777 | 小sao货叫开腿我cao死你 |