純Python綜合影像處理小工具(3)10種濾鏡演算法

來源:互聯網
上載者:User

標籤:

<背景> 

濾鏡處理是影像處理中一種非常常見的方法。比如photoshop中的濾鏡效果,除了內建的濾鏡,還擴充了很多第三方的濾鏡效果外掛程式,可以對映像做豐富多樣的變換;很多手機app實現了即時濾鏡功能,最有名的當屬Instagram。

濾鏡的原理,常見的是針對數位影像的像素矩陣,使用一個nxn的方形矩陣做濾波器(即kernel,常見的如3x3,5x5等),對該像素矩陣進行遍曆,遍曆後的映像就是輸出映像,如果演算法經過最佳化,遍曆的速度足夠快,那就是即時濾鏡(live filter),可以即時預覽映像過濾後的效果。

ImageFilter是Python PIL的濾鏡模組,目前的版本支援10種加強濾鏡,通過這些預定義的濾鏡,可以方便的對圖片進行一些過濾操作,從而去掉圖片中的噪音(部分的消除),這樣可以降低影像處理演算法的複雜度(如模式識別等),更方便的實現和預覽一些演算法的效果。

本文指令碼包含以下全部濾鏡, 實現了10種影像處理濾鏡的效果預覽和JPEG檔案儲存。

ImageFilter.BLUR

模糊濾鏡
ImageFilter.CONTOUR
輪廓
ImageFilter.DETAIL
細節濾鏡
ImageFilter.EDGE_ENHANCE 邊界加強
ImageFilter.EDGE_ENHANCE_MORE 邊界加強(閥值更 大)
ImageFilter.EMBOSS 浮雕濾鏡
ImageFilter.FIND_EDGES 邊界濾鏡
ImageFilter.SMOOTH 平滑濾鏡
ImageFilter.SMOOTH_MORE 平滑濾鏡(閥值更大)
ImageFilter.SHARPEN 銳利化濾鏡

 

<效果> 

原圖:

 

 

模糊濾鏡:

 

 

銳度增強濾鏡: 

 

細節濾鏡:

 

 

輪廓濾鏡:

 

 

邊界提取濾鏡:

 

 

邊界增強濾鏡:

 

 

邊界增強濾鏡-加強版:

 

 

平滑濾鏡:

 

 

平滑濾鏡-加強版:

 

 

浮雕濾鏡:

 

 

<源碼分析>

 PIL庫的濾鏡演算法可以在Python\Lib\site-packages\PIL路徑下找到,如下所示:

  

在PIL路徑下,我們看到了三個同名但尾碼不同的檔案:ImageFilter.py ImageFilter.pyc ImageFilter.pyo 。

.pyc檔案:是同名的.py編譯後的位元組碼檔案,用來供解譯器解釋執行;

.pyo檔案:是同名的.pyc檔案經過最佳化後的位元組碼檔案,通常體積更小,運行更快。

濾鏡演算法在ImageFilter.py檔案中。

如前文所述,每一個濾鏡通常對應著一個濾波器(即kernel),PIL中的kernel均為常見的3x3和5x5方形矩陣,下面是PIL中9種濾鏡對應的矩陣:

 

模糊濾鏡:

class BLUR(BuiltinFilter):
    name = "Blur"
    filterargs = (5, 5), 16, 0, (
        1,  1,  1,  1,  1,
        1,  0,  0,  0,  1,
        1,  0,  0,  0,  1,
        1,  0,  0,  0,  1,
        1,  1,  1,  1,  1
        )        

 輪廓濾鏡:

class CONTOUR(BuiltinFilter):
    name = "Contour"
    filterargs = (3, 3), 1, 255, (
        -1, -1, -1,
        -1,  8, -1,
        -1, -1, -1
        )

 

細節濾鏡:

class DETAIL(BuiltinFilter):
    name = "Detail"
    filterargs = (3, 3), 6, 0, (
        0, -1,  0,
        -1, 10, -1,
        0, -1,  0
        )

 

邊緣增強濾鏡:

class EDGE_ENHANCE(BuiltinFilter):
    name = "Edge-enhance"
    filterargs = (3, 3), 2, 0, (
        -1, -1, -1,
        -1, 10, -1,
        -1, -1, -1
        )

 

邊緣增強濾鏡-增強版:

該增強版和原濾鏡僅僅是矩陣2行2列的一個參數大小不同,實際是修改了中心像素的權重。這個數值可以任意修改以自訂邊緣增強幅度。class EDGE_ENHANCE_MORE(BuiltinFilter):
    name = "Edge-enhance More"
    filterargs = (3, 3), 1, 0, (
        -1, -1, -1,
        -1,  9, -1,
        -1, -1, -1
        )

 

 浮雕濾鏡

class EMBOSS(BuiltinFilter):
    name = "Emboss"
    filterargs = (3, 3), 1, 128, (
        -1,  0,  0,
        0,  1,  0,
        0,  0,  0
        )


 邊緣提取濾鏡

class FIND_EDGES(BuiltinFilter):
    name = "Find Edges"
    filterargs = (3, 3), 1, 0, (
        -1, -1, -1,
        -1,  8, -1,
        -1, -1, -1
        )

 

平滑濾鏡:

class SMOOTH(BuiltinFilter):
    name = "Smooth"
    filterargs = (3, 3), 13, 0, (
        1,  1,  1,
        1,  5,  1,
        1,  1,  1
        ) 

 

 平滑濾鏡-加強版:

平滑濾鏡的加強是增加了濾鏡視窗的尺寸,有3x3擴充到5x5, 這樣每一個新像素的產生會包含25個周圍原始像素的加權貢獻(離得越近,貢獻越大),這樣的結果會更加平滑自然,代價是處理速度會明顯的變慢。 

class SMOOTH_MORE(BuiltinFilter):
    name = "Smooth More"
    filterargs = (5, 5), 100, 0, (
        1,  1,  1,  1,  1,
        1,  5,  5,  5,  1,
        1,  5, 44,  5,  1,
        1,  5,  5,  5,  1,
        1,  1,  1,  1,  1
        )


 銳利化濾鏡:

class SHARPEN(BuiltinFilter):
    name = "Sharpen"
    filterargs = (3, 3), 16, 0, (
        -2, -2, -2,
        -2, 32, -2,
        -2, -2, -2
        )

 

 

<指令碼源碼> 

#start
# -*- coding: cp936 -*-
import Image,ImageDraw
import ImageFilter,random,sys
img = Image.open("1.jpg")

##影像處理##

#轉換為RGB映像
img = img.convert("RGB")              

#經過PIL內建filter處理
imgfilted_b = img.filter(ImageFilter.BLUR)
imgfilted_c = img.filter(ImageFilter.CONTOUR)
imgfilted_ee = img.filter(ImageFilter.EDGE_ENHANCE)
imgfilted_ee_m = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
imgfilted_em = img.filter(ImageFilter.EMBOSS)                    
imgfilted_fe = img.filter(ImageFilter.FIND_EDGES)                                                
imgfilted_sm = img.filter(ImageFilter.SMOOTH)
imgfilted_sm_m = img.filter(ImageFilter.SMOOTH_MORE)
imgfilted_sh = img.filter(ImageFilter.SHARPEN)
imgfilted_d = img.filter(ImageFilter.Detail)

##映像儲存##

imgfilted_b.save("1b.jpg")
imgfilted_c.save("1c.jpg")
imgfilted_ee.save("1ee.jpg")
imgfilted_ee_m.save("1eem.jpg")
imgfilted_em.save("1em.jpg")
imgfilted_fe.save("1fe.jpg")                                
imgfilted_sm.save("1sm.jpg")
imgfilted_sm_m.save("1smm.jpg")
imgfilted_sh.save("1sh.jpg")
imgfilted_d.save("1d.jpg")

##映像顯示##

imgfilted_b.show()
imgfilted_c.show()
imgfilted_ee.show()
imgfilted_ee_m.show()
imgfilted_em.show()
imgfilted_fe.show()                                
imgfilted_sm.show()
imgfilted_sm_m.show()
imgfilted_sh.show()
imgfilted_d.show()
#end


 

純Python綜合影像處理小工具(3)10種濾鏡演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.