日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

灰度图像--图像增强 锐化基础

發(fā)布時(shí)間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 灰度图像--图像增强 锐化基础 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
 灰度圖像--圖像增強(qiáng) 銳化基礎(chǔ) ???????

目錄(?)[+]

  • 開篇廢話
  • 銳化的理解
  • 數(shù)學(xué)基礎(chǔ)
  • 一階微分
  • 二階微分
  • 總結(jié)
  • 學(xué)習(xí)DIP第33天

    轉(zhuǎn)載請標(biāo)明本文出處:http://blog.csdn.net/tonyshengtan,歡迎大家轉(zhuǎn)載,發(fā)現(xiàn)博客被某些論壇轉(zhuǎn)載后,圖像無法正常顯示,無法正常表達(dá)本人觀點(diǎn),對此表示很不滿意。有些網(wǎng)站轉(zhuǎn)載了我的博文,很開心的是自己寫的東西被更多人看到了,但不開心的是這段話被去掉了,也沒標(biāo)明轉(zhuǎn)載來源,雖然這并沒有版權(quán)保護(hù),但感覺還是不太好,出于尊重文章作者的勞動(dòng),轉(zhuǎn)載請標(biāo)明出處!!!!

    文章代碼已托管,歡迎共同開發(fā):https://github.com/Tony-Tan/DIPpro

    開篇廢話


    ? ? ? ? 這篇作為基礎(chǔ)篇,所以廢話不多,但感覺很多人對銳化有誤解,尤其是和邊緣提取,其實(shí)這兩個(gè)概念完全是兩回事,當(dāng)然有相關(guān)的地方,下面詳細(xì)說說自己的理解。

    銳化的理解


    ? ? ? ?首先說說銳化,銳化是圖像增強(qiáng)的一部分,前面說過了,增強(qiáng)的目的是使觀察者看起來更容易識(shí)別某些模式,要觀察的模式從頻率域來分就有低頻模式和高頻模式,低頻模式,也就是之前一直在講的相對變化緩慢的部分,或者根本沒有灰度變化的大片區(qū)域,高頻部分,就是接下來講的,圖像的細(xì)節(jié),細(xì)節(jié)的定義不知道是什么,但邊界,輪廓,一些變化強(qiáng)烈的部分算是細(xì)節(jié),當(dāng)然噪聲也被歸類到了細(xì)節(jié),但細(xì)節(jié)的具體定義我還不知道,是否有相關(guān)算法能夠?qū)?xì)節(jié)進(jìn)行定義,還不知道。銳化的目的就是在圖像中強(qiáng)調(diào)這些細(xì)節(jié),而不是提取這些細(xì)節(jié)。也就是說對原圖中的細(xì)節(jié)進(jìn)行一定的提升,使得圖像對于觀察者來說更容易識(shí)別或者看起來更舒服。 ? ? ? ?根據(jù)上面的解釋,我們就能得到圖像銳化的一般步驟:
    ? ? ? ?因?yàn)橐怀黾?xì)節(jié),所以第一步就是找到細(xì)節(jié),至于如何找到細(xì)節(jié),岡薩雷斯書中給出了三種方法,一階微分,二階微分,非銳化掩蔽(unsharpen mask)。 ? ? ? ?突出細(xì)節(jié)的方法:將提取的細(xì)節(jié),或細(xì)節(jié)乘以預(yù)定的系數(shù)后與原圖像相加(或相減)。這樣就得到了銳化后的圖像。

    數(shù)學(xué)基礎(chǔ)


    一階微分


    ? ? ? ? 因?yàn)閳D像是離散信號(hào),所以其一階微分并不像連續(xù)函數(shù)按照極限方式的定義,而且對數(shù)字函數(shù)的一階微分定義有不同理解,但所有的定義都滿足一下三點(diǎn):
  • 恒定灰度值區(qū)域一階微分為零
  • 灰度臺(tái)階或者灰度斜坡起始處一階微分非零
  • 在灰度斜坡上一階微分非零
  • ? ? ? ?對于函數(shù)f(x)的一階微分或?qū)?shù),將展開為關(guān)于x的泰勒級(jí)數(shù),令,只保留泰勒級(jí)數(shù)的線性項(xiàng)結(jié)果為數(shù)字差分:
    使用偏導(dǎo)數(shù)是為了與圖像函數(shù)對應(yīng),因?yàn)閳D像函數(shù)是二維函數(shù),顯然當(dāng)函數(shù)只有一個(gè)變量的時(shí)候: 于是我們得到一階微分的基本定義是差值。

    二階微分


    ? ? ? 對于二階微分,我們對上面式子關(guān)于x再次求導(dǎo),得到二階導(dǎo)數(shù)表達(dá)式:
    ? ? ? ?上面第二行用到了一階微分的定義,所以得到了二階微分的表達(dá)式。 ? ? ? ?與一階微分類似,二階微分也必須保證下面幾點(diǎn)
  • 在恒定灰度區(qū)域?yàn)榱?/span>
  • 在灰度臺(tái)階和灰度斜坡起始處為非零
  • 沿灰度斜坡微分為零
  • ? ? ? ?看一個(gè)一維的例子:
    ? ? ? ?上面是一幅圖的一行數(shù)據(jù),數(shù)據(jù)中包含了斜坡,孤立點(diǎn),線條,和臺(tái)階,可以看到下面對應(yīng)的原始數(shù)據(jù),一階導(dǎo)數(shù),二階導(dǎo)數(shù),一階導(dǎo)數(shù)是原始數(shù)據(jù)的差,二階導(dǎo)數(shù)是一階導(dǎo)數(shù)的差。當(dāng)然減數(shù)和被減數(shù)的順序可以從左到右也可以從右到左。 ? ? ? 可以對照上面的實(shí)際數(shù)據(jù),證明必須要滿足的三點(diǎn)都成立。所以我們可以用此來定義一階和二階微分。 ? ? ? 上面數(shù)據(jù)中,我們可以看到在斜坡處,二階微分會(huì)出現(xiàn)一個(gè)零交叉,這對于邊界定位來說是非常有用的,因?yàn)樵趫D像中邊緣一般情況下是以斜坡方式存在,所以,一階微分給出的邊緣會(huì)相對較粗,二階微分給出較準(zhǔn)確的位置,也正是因?yàn)檫@一點(diǎn),二階微分比一階微分在銳化細(xì)節(jié)方面表現(xiàn)更好。

    總結(jié)


    ? ? ? ?因?yàn)橐陨蠟榧兝碚撝R(shí),所以今天做一個(gè)簡單的總結(jié),相關(guān)的實(shí)驗(yàn)和圖像處理結(jié)果會(huì)在后面的相關(guān)算法介紹中給出。
    學(xué)習(xí)DIP第34天

    轉(zhuǎn)載請標(biāo)明本文出處:http://blog.csdn.net/tonyshengtan,歡迎大家轉(zhuǎn)載,發(fā)現(xiàn)博客被某些論壇轉(zhuǎn)載后,圖像無法正常顯示,無法正常表達(dá)本人觀點(diǎn),對此表示很不滿意。有些網(wǎng)站轉(zhuǎn)載了我的博文,很開心的是自己寫的東西被更多人看到了,但不開心的是這段話被去掉了,也沒標(biāo)明轉(zhuǎn)載來源,雖然這并沒有版權(quán)保護(hù),但感覺還是不太好,出于尊重文章作者的勞動(dòng),轉(zhuǎn)載請標(biāo)明出處!!!!

    文章代碼已托管,歡迎共同開發(fā):https://github.com/Tony-Tan/DIPpro

    開篇廢話

    ? ? ?

    ? ? ? ?今天的廢話是,銳化和后面的分割有很大的關(guān)系,所以決定把圖像增強(qiáng)總結(jié)完以后開始說分割,分割中有很多又去的課題,比如邊緣提取,形狀識(shí)別等,具有挑戰(zhàn)性,圖像增強(qiáng)除了平滑和銳化還有灰度變換,但在很早以前已經(jīng)寫過灰度變換的一些例子了,所以,后面只簡要的寫下原理,周一就可以開始研究分割了,每當(dāng)結(jié)束一個(gè)大分支的時(shí)候總有一種踏上新的征途的感覺,但不得不承認(rèn),之前所學(xué)習(xí)的一切只是基礎(chǔ)知識(shí),如果想深入的話可能要花費(fèi)很長時(shí)間,尤其是圖像處理這么復(fù)雜的多學(xué)科領(lǐng)域,新技術(shù)日新月異,但只要打好基礎(chǔ),一定會(huì)在以后從事的領(lǐng)域中大展拳腳,希望與因?yàn)閻酆枚鴱氖聢D像處理,計(jì)算機(jī)視覺的攻城獅們共同進(jìn)步。


    數(shù)學(xué)基礎(chǔ)

    ? ? ? ?拉普拉斯算子,二階微分線性算子,為什么上來就學(xué)二階微分算子,前文說過,與一階微分相比,二階微分的邊緣定位能力更強(qiáng),銳化效果更好,所以我們來先學(xué)習(xí)二階微分算子,使用二階微分算子的基本方法是定義一種二階微分的離散形式,然后根據(jù)這個(gè)形式生成一個(gè)濾波模板,與圖像卷積。

    ? ? ? ?各向同性濾波器,圖像旋轉(zhuǎn)后響應(yīng)不變,這就要求濾波模板自身是對稱的,如果不對稱,結(jié)果就是,當(dāng)原圖旋轉(zhuǎn)90°時(shí),原圖某一點(diǎn)能檢測出細(xì)節(jié)(突變)的,現(xiàn)在卻檢測不出來,這就是各向異性的原因。我們更關(guān)心的是各向同性濾波模板,對圖像的旋轉(zhuǎn)不敏感。

    ? ? ? ?對于二維圖像f(x,y),二階微分最簡單的定義--拉普拉斯算子定義為:


    對于任意階微分算子都是線性算子,所以二階微分算子和后面的一階微分算子都可以用生成模板然后卷積的方式得出結(jié)果。

    根據(jù)前面對二階微分的定義有:


    根據(jù)上面的定義,與拉普拉斯算子的定義相結(jié)合,得到:


    也就是一個(gè)點(diǎn)的拉普拉斯的算子計(jì)算結(jié)果是上下左右的灰度的和減去本身灰度的四倍。同樣,可以根據(jù)二階微分的不同定義,所有符號(hào)相反,也就是上式所有灰度值全加上負(fù)號(hào),就是-1,-1,-1,-1,4。但要注意,符號(hào)改變,銳化的時(shí)候與原圖的加或減應(yīng)當(dāng)相對變化。上面是四鄰接的拉普拉斯算子,將這個(gè)算子旋轉(zhuǎn)45°后與原算子相加,就變成八鄰域的算子了,也就是一個(gè)像素周圍一圈8個(gè)像素的和與中間像素8倍的差,作為拉普拉斯計(jì)算結(jié)果。

    ? ? ? ?因?yàn)橐獜?qiáng)調(diào)圖像中突變(細(xì)節(jié)),所以平滑灰度的區(qū)域,無響應(yīng),即模板系數(shù)的和為0,也是二階微分必備條件。

    ? ? ? ?最后的銳化公式:


    ? ? ? g是輸出,f為原始圖像,c是系數(shù),也就是要加上多少細(xì)節(jié)的多少,與上一篇的銳化過程是一致的,先提取細(xì)節(jié),然后再加(或者減去負(fù)細(xì)節(jié))到原圖中。

    ? ? ? ?得到濾波模板,此模板尺寸恒定,就是3x3,不像平滑模板,尺寸可變:




    代碼

    [cpp] view plaincopyprint?
  • void?Laplace(double?*src,double?*dst,int?width,int?height,int?mask_type){??
  • ????double?LaplaceMask0[9]={0,1,0,1,-4,1,0,1,0};??
  • ????double?LaplaceMask1[9]={1,1,1,1,-8,1,1,1,1};??
  • ????double?LaplaceMask2[9]={0,-1,0,-1,4,-1,0,-1,0};??
  • ????double?LaplaceMask3[9]={-1,-1,-1,-1,8,-1,-1,-1,-1};??
  • ????switch(mask_type){??
  • ????????case?SHARPEN_LAP_0:??
  • ????????????RealRelevant(src,?dst,?LaplaceMask0,?width,?height,?LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);??
  • ????????????break;??
  • ????????case?SHARPEN_LAP_1:??
  • ????????????RealRelevant(src,?dst,?LaplaceMask1,?width,?height,?LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);??
  • ????????????break;??
  • ????????case?SHARPEN_LAP_2:??
  • ????????????RealRelevant(src,?dst,?LaplaceMask2,?width,?height,?LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);??
  • ????????????break;??
  • ????????case?SHARPEN_LAP_3:??
  • ????????????RealRelevant(src,?dst,?LaplaceMask3,?width,?height,?LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);??
  • ????????????break;??
  • ????????default:??
  • ????????????printf("wrong?mask?type\n");??
  • ????????????matrixCopy(src,?dst,?width,?height);??
  • ????????????break;??
  • ????}??
  • ??
  • ??
  • ??
  • }??
  • void?LaplaceSharpen(double?*src,double?*dst,int?width,int?height,int?mask_type,double?c){??
  • ??????
  • ??????
  • ????Laplace(src,dst,width,height,mask_type);??
  • ????matrixMultreal(dst,dst,c,width,height);??
  • ??
  • ????switch(mask_type){??
  • ????????case?SHARPEN_LAP_0:??
  • ????????case?SHARPEN_LAP_1:??
  • ????????????matrixSub(src,dst,dst,width,height);??
  • ????????????break;??
  • ????????case?SHARPEN_LAP_2:??
  • ????????case?SHARPEN_LAP_3:??
  • ????????????matrixAdd(src,dst,dst,width,height);??
  • ????????????break;??
  • ????????default:??
  • ????????????printf("wrong?mask?type\n");??
  • ????????????matrixCopy(src,?dst,?width,?height);??
  • ????????????break;??
  • ????}??
  • }??
  • void Laplace(double *src,double *dst,int width,int height,int mask_type){double LaplaceMask0[9]={0,1,0,1,-4,1,0,1,0};double LaplaceMask1[9]={1,1,1,1,-8,1,1,1,1};double LaplaceMask2[9]={0,-1,0,-1,4,-1,0,-1,0};double LaplaceMask3[9]={-1,-1,-1,-1,8,-1,-1,-1,-1};switch(mask_type){case SHARPEN_LAP_0:RealRelevant(src, dst, LaplaceMask0, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);break;case SHARPEN_LAP_1:RealRelevant(src, dst, LaplaceMask1, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);break;case SHARPEN_LAP_2:RealRelevant(src, dst, LaplaceMask2, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);break;case SHARPEN_LAP_3:RealRelevant(src, dst, LaplaceMask3, width, height, LAPLACE_MASK_SIZE,LAPLACE_MASK_SIZE);break;default:printf("wrong mask type\n");matrixCopy(src, dst, width, height);break;}} void LaplaceSharpen(double *src,double *dst,int width,int height,int mask_type,double c){Laplace(src,dst,width,height,mask_type);matrixMultreal(dst,dst,c,width,height);switch(mask_type){case SHARPEN_LAP_0:case SHARPEN_LAP_1:matrixSub(src,dst,dst,width,height);break;case SHARPEN_LAP_2:case SHARPEN_LAP_3:matrixAdd(src,dst,dst,width,height);break;default:printf("wrong mask type\n");matrixCopy(src, dst, width, height);break;} }


    結(jié)果

    ? ? ? ?來看對一副月球圖片的銳化效果,分別使用四種模板,其結(jié)果是四鄰接的兩個(gè)模板結(jié)果相同,八鄰接的結(jié)果相同,觀察兩個(gè)不同的系數(shù),分別c=0.5和c=0.8,具體系數(shù)已經(jīng)標(biāo)注在圖片上了:

    原圖:


    原圖灰度圖像:


    細(xì)節(jié)提取:


    銳化圖像:





    總結(jié)

    ? ? 總結(jié)就是,二階微分拉普拉斯算子對圖像的銳化效果很不錯(cuò),但對噪聲敏感,后面介紹非銳化掩蔽,和一階微分算子 ?? 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的灰度图像--图像增强 锐化基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。