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>

        基于OpenCV的圖像陰影去除

        共 3466字,需瀏覽 7分鐘

         ·

        2020-12-08 13:52

        點擊上方AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂

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



        我們經(jīng)常需要通過掃描將紙上的全部內(nèi)容轉(zhuǎn)換為圖像。有很多在線工具可以提高圖像的亮度,或者消除圖像中的陰影。但是我們可以手動刪除陰影嗎?當(dāng)然可以,我們只需要將圖像加載到相應(yīng)的代碼中,無需任何應(yīng)用程序即可在幾秒鐘內(nèi)獲得輸出。這個代碼可以通過Numpy和OpenCV基本函數(shù)來實現(xiàn)。為了說明該過程,使用了以下圖像進(jìn)行操作。


        Test_image


        1.圖像中有一個非常明顯的陰影需要刪除。首先當(dāng)然是將必要的軟件包導(dǎo)入環(huán)境。

        import cv2import numpy as npimport matplotlib.pyplot as plt


        2.刪除陰影時,有兩件事要注意。由于圖像是灰度圖像,如果圖像背景較淺且對象較暗,則必須先執(zhí)行最大濾波,然后再執(zhí)行最小濾波。如果圖像背景較暗且物體較亮,我們可以先執(zhí)行最小濾波,然后再進(jìn)行最大濾波。

        那么,最大過濾和最小過濾到底是什么?


        3.最大濾波:讓我們假設(shè)我們有一定大小的圖像I。我們編寫的算法應(yīng)該逐個遍歷I的像素,并且對于每個像素(x,y),它必須找到該像素周圍的鄰域(大小為N x N的窗口)中的最大灰度值,并進(jìn)行寫入A中相應(yīng)像素位置(x,y)的最大灰度值。所得圖像A稱為輸入圖像I的最大濾波圖像?,F(xiàn)在讓我們通過代碼來實現(xiàn)這個概念。

        • max_filtering()函數(shù)接受輸入圖像和窗口大小N。

        • 它最初在輸入數(shù)組周圍創(chuàng)建一個“墻”(帶有-1的填充),當(dāng)我們遍歷邊緣像素時會有所幫助。

        • 然后,我們創(chuàng)建一個“ temp”變量,將計算出的最大值復(fù)制到其中。

        • 然后,我們遍歷該數(shù)組并圍繞大小為N x N的當(dāng)前像素創(chuàng)建一個窗口。

        • 然后,我們使用“ amax()”函數(shù)在該窗口中計算最大值,并將該值寫入temp數(shù)組。

        • 我們將該臨時數(shù)組復(fù)制到主數(shù)組A中,并將其作為輸出返回。

        • A是輸入I的最大濾波圖像。

        def max_filtering(N, I_temp):    wall = np.full((I_temp.shape[0]+(N//2)*2, I_temp.shape[1]+(N//2)*2), -1)    wall[(N//2):wall.shape[0]-(N//2), (N//2):wall.shape[1]-(N//2)] = I_temp.copy()    temp = np.full((I_temp.shape[0]+(N//2)*2, I_temp.shape[1]+(N//2)*2), -1)    for y in range(0,wall.shape[0]):        for x in range(0,wall.shape[1]):            if wall[y,x]!=-1:                window = wall[y-(N//2):y+(N//2)+1,x-(N//2):x+(N//2)+1]                num = np.amax(window)                temp[y,x] = num    A = temp[(N//2):wall.shape[0]-(N//2), (N//2):wall.shape[1]-(N//2)].copy()    return A


        4.最小濾波:此算法與最大濾波完全相同,但是我們沒有找到附近的最大灰度值,而是在該像素周圍的N x N鄰域中找到了最小值,并將該最小灰度值寫入B中的(x,y)。所得圖像B稱為圖像I的經(jīng)過最小濾波的圖像,代碼如下。

        def min_filtering(N, A):    wall_min = np.full((A.shape[0]+(N//2)*2, A.shape[1]+(N//2)*2), 300)    wall_min[(N//2):wall_min.shape[0]-(N//2), (N//2):wall_min.shape[1]-(N//2)] = A.copy()    temp_min = np.full((A.shape[0]+(N//2)*2, A.shape[1]+(N//2)*2), 300)    for y in range(0,wall_min.shape[0]):        for x in range(0,wall_min.shape[1]):            if wall_min[y,x]!=300:                window_min = wall_min[y-(N//2):y+(N//2)+1,x-(N//2):x+(N//2)+1]                num_min = np.amin(window_min)                temp_min[y,x] = num_min    B = temp_min[(N//2):wall_min.shape[0]-(N//2), (N//2):wall_min.shape[1]-(N//2)].copy()    return B


        5.因此,如果圖像的背景較淺,我們要先執(zhí)行最大過濾,這將為我們提供增強(qiáng)的背景,并將該最大過濾后的圖像傳遞給最小過濾功能,該功能將負(fù)責(zé)實際的內(nèi)容增強(qiáng)。


        6.因此,執(zhí)行最小-最大濾波后,我們獲得的值不在0-255的范圍內(nèi)。因此,我們必須歸一化使用背景減法獲得的最終陣列,該方法是將原始圖像減去最小-最大濾波圖像,以獲得去除陰影的最終圖像。

        #B is the filtered image and I is the original imagedef background_subtraction(I, B):    O = I - B    norm_img = cv2.normalize(O, None, 0,255, norm_type=cv2.NORM_MINMAX)    return norm_img


        7.變量N(用于過濾的窗口大?。⒏鶕?jù)圖像中粒子或內(nèi)容的大小進(jìn)行更改。對于測試圖像,選擇大小N = 20。增強(qiáng)后的最終輸出圖像如下所示:

        Test_image_output


        輸出圖像相較于原始圖像已經(jīng)沒有任何的陰影啦。

        代碼鏈接:https://github.com/kavyamusty/Shading-removal-of-images


        下載1:何愷明頂會分享


        AI算法與圖像處理」公眾號后臺回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


        下載2:leetcode 開源


        AI算法與圖像處理」公眾號后臺回復(fù):leetcode,即可下載。每題都 runtime beats 100% 的開源好書,你值得擁有!



        下載3 CVPR2020

        AI算法與圖像處公眾號后臺回復(fù):CVPR2020即可下載1467篇CVPR 2020論文
            
        個人微信(如果沒有備注不拉群!
        請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱


        覺得不錯就點亮在看吧


        瀏覽 67
        點贊
        評論
        收藏
        分享

        手機(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>
            99麻豆 | 男女黄色视频网站 | 一本色道久久综合无码人妻88 | 欲求不满小早川怜子 | 色妞www精品视频免费观看 | 户外少妇对白啪啪野战 | 天天l日屄在线观看 | 黄色小说在线看 | 夜夜撸夜夜 | jlzzz13免费人成A片 |