Python視覺識(shí)別--OpenCV模糊\高斯模糊\EPF\圖像直方圖(五)

(十一) 模糊

模糊操作方式:
均值模糊:一般用來處理圖像的隨機(jī)噪聲
中值模糊:一般用來處理圖像的椒鹽噪聲
自定義模糊:對(duì)圖像進(jìn)行銳化之類的操作
基于離散卷積砾医、定義好每個(gè)卷積核衣厘、不同卷積核得到不同的卷積效果、模糊是卷積的一種表象

import cv2 as cv
import numpy as np

def blur(image):
    """
    均值模糊
    """
    # 參數(shù)(5影暴,5):表示高斯矩陣的長(zhǎng)與寬都是5
    dst = cv.blur(image, (5, 5))
    # 圖二為均值模糊圖
    cv.imshow("blur", dst)


def median(image):
    """
    中值模糊
    """
    # 第二個(gè)參數(shù)是孔徑的尺寸,一個(gè)大于1的奇數(shù)撬呢。
    # 比如這里是5,中值濾波器就會(huì)使用5×5的范圍來計(jì)算魂拦。
    # 即對(duì)像素的中心值及其5×5鄰域組成了一個(gè)數(shù)值集搁嗓,對(duì)其進(jìn)行處理計(jì)算芯勘,當(dāng)前像素被其中值替換掉腺逛。
    # 參考自:http://blog.csdn.net/sunny2038/article/details/9155893
    dst = cv.medianBlur(image, 5)
    # 圖三為中值模糊
    cv.imshow("median", dst)

def custom(image):
    """
    自定義模糊
    """
    # 定義一個(gè)5*5的卷積核
    kernel = np.ones([5, 5], np.float32) / 25
    dst = cv.filter2D(image, -1, kernel=kernel)
    # 圖四為效果圖
    cv.imshow("custom", dst)


# 讀入圖片文件
src = cv.imread('images/test.jpg')
# 圖一為原圖
cv.imshow('image 1', src)

blur(src)
median(src)
custom(src)
# 等待用戶操作
cv.waitKey(0)
# 釋放所有窗口
cv.destroyAllWindows()

模糊

(十二)高斯模糊

把要模糊的像素色值統(tǒng)計(jì),用數(shù)學(xué)上加權(quán)平均的計(jì)算方法(高斯函數(shù))得到色值安疗,對(duì)范圍茄靠、半徑等進(jìn)行模糊茂契。
一些美顏軟件慨绳、美顏相機(jī)上的磨皮和毛玻璃特效基本上都是用的高斯模糊,并且大部分圖像處理軟件中都有高斯模糊的操作脐雪,除此之外,高斯模糊還具有減少圖像層次和深度的功能璧亚。

import cv2 as cv
import numpy as np


def clamp(pv):
    """防止顏色值超出顏色取值范圍(0-255)"""
    if pv > 255:
        return 255
    if pv < 0:
        return 0
    else:
        return pv

#高斯噪聲
def gaussian_noise(image):
    """高斯噪聲"""
    h, w, c = image.shape
    for row in range(h):
        for col in range(w):
            # 獲取三個(gè)高斯隨機(jī)數(shù)
            # 第一個(gè)參數(shù):概率分布的均值脂信,對(duì)應(yīng)著整個(gè)分布的中心
            # 第二個(gè)參數(shù):概率分布的標(biāo)準(zhǔn)差癣蟋,對(duì)應(yīng)于分布的寬度
            # 第三個(gè)參數(shù):生成高斯隨機(jī)數(shù)數(shù)量
            s = np.random.normal(0, 20, 3)
            # 獲取每個(gè)像素點(diǎn)的bgr值
            b = image[row, col, 0]
            g = image[row, col, 1]
            r = image[row, col, 2]
            # 給每個(gè)像素值設(shè)置新的bgr值
            image[row, col, 0] = clamp(b + s[0])
            image[row, col, 0] = clamp(g + s[1])
            image[row, col, 0] = clamp(r + s[2])
    cv.imshow("noise", image)

# 讀入圖片文件
src = cv.imread('images/test.jpg')
#高斯噪聲
gaussian_noise(src)
# 給圖片創(chuàng)建毛玻璃特效
# 第二個(gè)參數(shù):高斯核的寬和高(建議是奇數(shù))
# 第三個(gè)參數(shù):x和y軸的標(biāo)準(zhǔn)差
dst = cv.GaussianBlur(src, (5, 5), 15)
cv.imshow("gaussian", dst)

# 等待用戶操作
cv.waitKey(0)
# 釋放所有窗口
cv.destroyAllWindows()
高斯模糊

(十三)EPF

高斯模糊只考慮了權(quán)重疯搅,只考慮了像素空間的分布濒生,沒有考慮像素值和另一個(gè)像素值之間差異的問題幔欧,如果像素間差異較大的情況下(比如圖像的邊緣),高斯模糊會(huì)進(jìn)行處理礁蔗,但是我們不需要處理邊緣,要進(jìn)行的操作就叫做邊緣保留濾波(EPF)晒骇。

import cv2 as cv
import numpy as np

def bi(image):
    """
    色彩窗的半徑
    圖像將呈現(xiàn)類似于磨皮的效果
    """

    # image:輸入圖像,可以是Mat類型厉碟,
    #       圖像必須是8位或浮點(diǎn)型單通道屠缭、三通道的圖像
    # 0:表示在過濾過程中每個(gè)像素鄰域的直徑范圍,一般為0
    # 后面兩個(gè)數(shù)字:空間高斯函數(shù)標(biāo)準(zhǔn)差呵曹,灰度值相似性標(biāo)準(zhǔn)差
    dst = cv.bilateralFilter(image, 0, 60, 10);
    cv.imshow('bi', dst)


def shift(image):
    """
    均值遷移
    圖像會(huì)呈現(xiàn)油畫效果
    """
    # 10:空間窗的半徑
    # 50:色彩窗的半徑
    dst = cv.pyrMeanShiftFiltering(image, 10, 50);
    cv.imshow('shift', dst)

src = cv.imread('images/test.jpg')
# 圖一(原圖)
cv.imshow('def', src)
# 圖二(色彩窗的半徑)
bi(src)
# 圖三(均值遷移)
shift(src)
cv.waitKey(0)
cv.destroyAllWindows()

色彩窗的半徑

均值遷移

(十三)圖像直方圖

由于其計(jì)算代價(jià)較小何暮,且具有圖像平移、旋轉(zhuǎn)海洼、縮放不變性等眾多優(yōu)點(diǎn),廣泛地應(yīng)用于圖像處理的各個(gè)領(lǐng)域域帐,特別是灰度圖像的閾值分割、基于顏色的圖像檢索以及圖像分類肖揣。
圖像主題內(nèi)容與背景分離浮入、圖像分類龙优、檢索等事秀。
注意:編寫代碼前需確保 matplotlib 庫(kù)已安裝野舶,如未安裝在命令行中輸入:pip install matplotlib

  1. 直方圖
import cv2 as cv
from matplotlib import pyplot as plt


def plot(image):
    """簡(jiǎn)單的圖像直方圖"""
    plt.hist(image.ravel(), 256, [0, 256])
    plt.show("直方圖")


def image_his(image):
    """
    這里生成的直方圖是opencv 對(duì)圖片
    進(jìn)行分割宰衙、圖像檢索等所需要的
    """
    color = ('blue', 'green', 'red')
    for i, color in enumerate(color):
        hist = cv.calcHist([image], [i], None, [256], [0, 256])
        plt.plot(hist, color=color)
        plt.xlim([0, 256])
    plt.show()


# 讀入圖片文件
src = cv.imread('images/test.jpg')
cv.imshow('def', src)

# 圖一
plot(src)
# 圖二
image_his(src)

cv.waitKey(0)
cv.destroyAllWindows()

簡(jiǎn)單的圖像直方圖

直方圖
  1. 使用直方圖調(diào)節(jié)對(duì)比度
import cv2 as cv

def equalHist(image):
    """直方圖均衡化,圖像增強(qiáng)的一個(gè)方法"""
    # 彩色圖片轉(zhuǎn)換為灰度圖片
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

    # 直方圖均衡化巢掺,自動(dòng)調(diào)整圖像的對(duì)比度,讓圖像變得清晰
    dst = cv.equalizeHist(gray)
    cv.imshow("equalHist", dst)


def clahe(image):
    """
    局部直方圖均衡化
    把整個(gè)圖像分成許多小塊(比如按8*8作為一個(gè)小塊)陆淀,
    那么對(duì)每個(gè)小塊進(jìn)行均衡化先嬉。
    這種方法主要對(duì)于圖像直方圖不是那么單一的(比如存在多峰情況)圖像比較實(shí)用
    """
    # 彩色圖片轉(zhuǎn)換為灰度圖片
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # cliplimit:灰度值
    # tilegridsize:圖像切割成塊,每塊的大小
    clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
    dst = clahe.apply(gray)
    cv.imshow("clahe", dst)


src = cv.imread('images/test.jpg')
# 圖一
cv.imshow("yt", src)
# 圖二
equalHist(src)
# 圖三
clahe(src)

cv.waitKey(0)
cv.destroyAllWindows()
直方圖均衡化

局部直方圖均衡化

注意:1疫蔓、全圖的直方圖均衡化會(huì)導(dǎo)致對(duì)比度過度增強(qiáng),所以在一些情況下應(yīng)使用局部直方圖均衡化岔乔;
2、opencv中直方圖均衡化都是基于灰度圖像的

  1. 對(duì)比圖片相似度
import cv2 as cv
import numpy as np

def create_rgb_hist(image):
    """創(chuàng)建rgb 三通道直方圖"""
    h, w, c = image.shape
    rgbHist = np.zeros([16 * 16 * 16, 1], np.float32)
    bsize = 256 / 16
    for row in range(h):
        for col in range(w):
            b = image[row, col, 0]
            g = image[row, col, 1]
            r = image[row, col, 2]
            index = np.int(b / bsize) * 16 * 16 + np.int(g / bsize) * 16 + np.int(r / bsize)
            rgbHist[np.int(index), 0] = rgbHist[np.int(index), 0] + 1
    return rgbHist

def hist_compare(image1, image2):
    hist1 = create_rgb_hist(image1)
    hist2 = create_rgb_hist(image2)
    # 巴氏距離比較雏门,距離越小越相似
    match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
    # 相關(guān)性比較掸掏,相關(guān)性越大越相似
    match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
    # 卡方比較,越大越不相似
    match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
    print("巴氏距離:%s 相關(guān)性:%s 卡方:%s" % (match1, match2, match3))

hist_compare(cv.imread('images/test.jpg'), cv.imread('images/test.jpg'))

圖1

結(jié)果
圖2

結(jié)果
圖3

結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市愿待,隨后出現(xiàn)的幾起案子浩螺,更是在濱河造成了極大的恐慌呼盆,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件访圃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡况脆,警方通過查閱死者的電腦和手機(jī)饭宾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門格了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盛末,你說我怎么就攤上這事∏牡” “怎么了?”我有些...
    開封第一講書人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵助泽,是天一觀的道長(zhǎng)嚎京。 經(jīng)常有香客問我嗡贺,道長(zhǎng)鞍帝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任膜眠,我火速辦了婚禮,結(jié)果婚禮上宵膨,老公的妹妹穿的比我還像新娘。我一直安慰自己炸宵,他們只是感情好辟躏,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著土全,像睡著了一般捎琐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裹匙,一...
    開封第一講書人閱讀 52,895評(píng)論 1 314
  • 那天瑞凑,我揣著相機(jī)與錄音,去河邊找鬼概页。 笑死籽御,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播技掏,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼铃将,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了哑梳?” 一聲冷哼從身側(cè)響起劲阎,我...
    開封第一講書人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸠真,失蹤者是張志新(化名)和其女友劉穎悯仙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吠卷,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雁比,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撤嫩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偎捎。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖序攘,靈堂內(nèi)的尸體忽然破棺而出茴她,到底是詐尸還是另有隱情,我是刑警寧澤程奠,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布丈牢,位于F島的核電站,受9級(jí)特大地震影響瞄沙,放射性物質(zhì)發(fā)生泄漏己沛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一距境、第九天 我趴在偏房一處隱蔽的房頂上張望申尼。 院中可真熱鬧,春花似錦垫桂、人聲如沸师幕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霹粥。三九已至,卻和暖如春疼鸟,著一層夾襖步出監(jiān)牢的瞬間后控,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工空镜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浩淘,地道東北人捌朴。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像馋袜,于是被迫代替她去往敵國(guó)和親男旗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容