国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

這篇具有很好參考價(jià)值的文章主要介紹了(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一:形態(tài)濾波

(1)概述

形態(tài)濾波:是一種在數(shù)字圖像處理中常用的圖像處理技術(shù),用于改善圖像的質(zhì)量、提取圖像的特定特征或去除圖像中的噪聲。形態(tài)濾波主要基于形態(tài)學(xué)運(yùn)算,通過(guò)結(jié)構(gòu)元素(也稱(chēng)為模板)對(duì)圖像進(jìn)行局部區(qū)域的操作,從而改變圖像的形狀和結(jié)構(gòu)。選擇不同形狀(如各向同性的圓、十字架、矩形、不同朝向的有向線(xiàn)段等)、不同尺寸的結(jié)構(gòu)元素可以提取圖像的不同特征

(2)程序

如下:實(shí)現(xiàn)對(duì)二值圖像的特征提取

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理


matlab實(shí)現(xiàn)

I=imread(‘pattern.jpg’);
BW1=im2bw(I,h);
BW1=1-BW1;
se=strel('square',3); 
BW2=1-imopen(BW1,se);
figure;imshow(BW2);title('矩形塊提取');
se45=strel('line',25,45);     
BW3=1-imopen(BW1,se45);
figure;imshow(BW3);title('線(xiàn)段提取');

python實(shí)現(xiàn)

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
I = cv2.imread('pattern.jpg', cv2.IMREAD_GRAYSCALE)

# 二值化處理
_, BW1 = cv2.threshold(I, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
BW1 = 255 - BW1

# 矩形塊提取
se = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
BW2 = cv2.morphologyEx(BW1, cv2.MORPH_OPEN, se)
BW2 = 255 - BW2

# 顯示矩形塊提取結(jié)果
plt.imshow(BW2, cmap='gray')
plt.title('矩形塊提取')
plt.show()

# 線(xiàn)段提取
se45 = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
se45 = cv2.rotate(se45, cv2.ROTATE_90_CLOCKWISE)
BW3 = cv2.morphologyEx(BW1, cv2.MORPH_OPEN, se45)
BW3 = 255 - BW3

# 顯示線(xiàn)段提取結(jié)果
plt.imshow(BW3, cmap='gray')
plt.title('線(xiàn)段提取')
plt.show()

二:圖像的平滑處理

(1)概述

圖像的平緩處理:是數(shù)字圖像處理中的一項(xiàng)重要任務(wù),它有助于減少圖像中的噪聲和細(xì)節(jié),并使圖像更加平滑和連續(xù)。通過(guò)結(jié)合開(kāi)運(yùn)算和閉運(yùn)算,可以實(shí)現(xiàn)圖像的更加全面的平滑處理。首先,使用開(kāi)運(yùn)算可以消除細(xì)小的噪聲和不連續(xù)區(qū)域,平滑邊緣,同時(shí)保留較大的結(jié)構(gòu)。接著,使用閉運(yùn)算可以填補(bǔ)空洞,連接區(qū)域,消除缺陷和斷裂,使圖像更加連續(xù)和平滑。對(duì)二值圖像平滑處理的形態(tài)學(xué)變換為

Y = ( X ° S ) ? S Y = ( X ? S ) ° S \begin{array}{l}\boldsymbol{Y}=(\boldsymbol{X} \circ \boldsymbol{S}) \cdot \boldsymbol{S} \\\boldsymbol{Y}=(\boldsymbol{X} \cdot \boldsymbol{S}) \circ \boldsymbol{S}\end{array} Y=(X°S)?SY=(X?S)°S?

例如下圖,結(jié)構(gòu)元素 S S S大于所有噪聲和噪聲塊的尺寸

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(2)程序

如下

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理


matlab實(shí)現(xiàn)

Image=imread('A.bmp');
BW=im2bw(Image);
SE=strel('square',3);
result1=imclose(imopen(BW,SE),SE); 
figure,imshow(result1);
result2=imopen(imclose(BW,SE),SE);               
figure,imshow(result2);

Python實(shí)現(xiàn)

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
Image = cv2.imread('A.bmp', cv2.IMREAD_GRAYSCALE)

# 二值化處理
_, BW = cv2.threshold(Image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 創(chuàng)建結(jié)構(gòu)元素
SE = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

# 先開(kāi)運(yùn)算再閉運(yùn)算
result1 = cv2.morphologyEx(cv2.morphologyEx(BW, cv2.MORPH_OPEN, SE), cv2.MORPH_CLOSE, SE)

# 顯示結(jié)果1
plt.imshow(result1, cmap='gray')
plt.show()

# 先閉運(yùn)算再開(kāi)運(yùn)算
result2 = cv2.morphologyEx(cv2.morphologyEx(BW, cv2.MORPH_CLOSE, SE), cv2.MORPH_OPEN, SE)

# 顯示結(jié)果2
plt.imshow(result2, cmap='gray')
plt.show()

三:圖像的邊緣提取

(1)概述

圖像的邊緣提取:是數(shù)字圖像處理中的一項(xiàng)重要任務(wù),它有助于凸顯圖像中的邊緣和輪廓信息,以便于進(jìn)一步的分析和處理。結(jié)合開(kāi)運(yùn)算和閉運(yùn)算可以實(shí)現(xiàn)圖像的邊緣提取。首先,應(yīng)用閉運(yùn)算可以填補(bǔ)圖像中的空洞和斷裂,連接邊緣區(qū)域,使邊緣更加連續(xù)。然后,應(yīng)用開(kāi)運(yùn)算可以平滑邊緣、去除細(xì)小的孤立點(diǎn)和細(xì)線(xiàn)條,突出邊緣特征。提取物體的輪廓邊緣的形態(tài)學(xué)變換

  • 內(nèi)邊界 Y = X ? ( X ? S ) \boldsymbol{Y}=\boldsymbol{X}-(\boldsymbol{X} \ominus \boldsymbol{S}) Y=X?(X?S)
  • 外邊界 Y = ( X ⊕ S ) ? X \boldsymbol{Y}=(\boldsymbol{X} \oplus \boldsymbol{S})-\boldsymbol{X} Y=(XS)?X
  • 形態(tài)學(xué)梯度 Y = ( X ⊕ S ) ? ( X ? S ) \boldsymbol{Y}=(\boldsymbol{X} \oplus \boldsymbol{S})-(\boldsymbol{X} \ominus \boldsymbol{S}) Y=(XS)?(X?S)

例如下圖,使用結(jié)構(gòu)元素 S S S對(duì)圖像 X X X進(jìn)行邊緣提取

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(2)程序

如下

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理


matlab實(shí)現(xiàn)

Image=imread('menu.bmp');
BW=im2bw(Image);
SE=strel('square',3);
result1=BW-imerode(BW,SE); 
result2=imdilate(BW,SE)-BW; 
result3=imdilate(BW,SE)-imerode(BW,SE);     
figure,imshow(result1);
figure,imshow(result2);
figure,imshow(result3);

python實(shí)現(xiàn)

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
Image = cv2.imread('menu.bmp', cv2.IMREAD_GRAYSCALE)

# 二值化處理
_, BW = cv2.threshold(Image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 創(chuàng)建結(jié)構(gòu)元素
SE = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

# 邊緣提取結(jié)果1
result1 = BW - cv2.erode(BW, SE)

# 顯示結(jié)果1
plt.imshow(result1, cmap='gray')
plt.show()

# 邊緣提取結(jié)果2
result2 = cv2.dilate(BW, SE) - BW

# 顯示結(jié)果2
plt.imshow(result2, cmap='gray')
plt.show()

# 邊緣提取結(jié)果3
result3 = cv2.dilate(BW, SE) - cv2.erode(BW, SE)

# 顯示結(jié)果3
plt.imshow(result3, cmap='gray')
plt.show()

四:區(qū)域填充

(1)概述

概述:是數(shù)字圖像處理中的一項(xiàng)常見(jiàn)任務(wù),它有助于填補(bǔ)圖像中的空洞或斷裂,并連接相鄰的區(qū)域,使圖像中的區(qū)域變得連續(xù)和完整。結(jié)合開(kāi)運(yùn)算和閉運(yùn)算可以實(shí)現(xiàn)圖像的區(qū)域填充。首先,通過(guò)應(yīng)用開(kāi)運(yùn)算,可以去除圖像中的小型空洞、斷裂和孤立點(diǎn),使得區(qū)域邊緣更加連續(xù)。接著,再應(yīng)用閉運(yùn)算,可以填補(bǔ)空洞、連接區(qū)域,使得圖像中的區(qū)域變得完整和連續(xù)

X k = ( X k ? 1 ? S ) ∩ A C , k = 1 , 2 , 3 , ? X_{k}=\left(X_{k-1} \bigoplus S\right) \cap A^{C}, \quad k=1,2,3, \cdots Xk?=(Xk?1??S)AC,k=1,2,3,?

如下圖,邊界點(diǎn)用灰色表示,賦值為1;所有非邊界點(diǎn)是白色部分,賦值為0

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(2)程序

如下

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理


matlab實(shí)現(xiàn)

Image=imread('coin.bmp');
BW=im2bw(Image);
imshow(BW); title('二值圖像');
result1=imfill(BW,'holes');
figure,imshow(result1);title('二值圖像的區(qū)域填充');

python實(shí)現(xiàn)

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
Image = cv2.imread('coin.bmp', cv2.IMREAD_GRAYSCALE)

# 二值化處理
_, BW = cv2.threshold(Image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 顯示二值圖像
plt.imshow(BW, cmap='gray')
plt.title('二值圖像')
plt.show()

# 區(qū)域填充
result1 = cv2.fillHoles(BW)

# 顯示區(qū)域填充結(jié)果
plt.imshow(result1, cmap='gray')
plt.title('二值圖像的區(qū)域填充')
plt.show()

五:目標(biāo)探測(cè)(擊中與否變換)

(1)概述

目標(biāo)探測(cè)(擊中與否變換):擊中與否變換的原理利用腐蝕特性——腐蝕的過(guò)程相當(dāng)于對(duì)可以填入結(jié)構(gòu)元素的位置作標(biāo)記的過(guò)程。目標(biāo)檢測(cè)既要檢測(cè)目標(biāo)內(nèi)部,也要檢測(cè)外部,即在一次運(yùn)算中要同時(shí)捕獲內(nèi)外標(biāo)記。因此,進(jìn)行目標(biāo)探測(cè),需要采用兩個(gè)結(jié)構(gòu)元素 S 1 S_{1} S1?、 S 2 S_{2} S2?,構(gòu)成一個(gè)結(jié)構(gòu)元素對(duì) S = ( S 1 , S 2 ) S=(S_{1},S_{2}) S=(S1?,S2?)

  • S 1 S_{1} S1?:探測(cè)目標(biāo)內(nèi)部
  • S 2 S_{2} S2?:探測(cè)目標(biāo)外部

則圖像 X X X用結(jié)構(gòu)元素 S S S進(jìn)行擊中與否變換,記為

X ? S = ( X ? S 1 ) ∩ ( X C ? S 2 ) X ? S = ( X ? S 1 ) ∩ ( X C ? S ^ 2 ) X ? S = { x ∣ S 1 + x ? X ?and? S 2 + x ? X C } \begin{array}{l}\boldsymbol{X} * \boldsymbol{S}=\left(\boldsymbol{X} \ominus \boldsymbol{S}_{\mathbf{1}}\right) \cap\left(\boldsymbol{X}^{\boldsymbol{C}} \ominus \boldsymbol{S}_{\mathbf{2}}\right) \\\boldsymbol{X} * \boldsymbol{S}=\left(\boldsymbol{X} \ominus \boldsymbol{S}_{\mathbf{1}}\right) \cap\left(\boldsymbol{X}^{\boldsymbol{C}} \bigoplus \widehat{\boldsymbol{S}}_{\mathbf{2}}\right) \\\boldsymbol{X} * \boldsymbol{S}=\left\{\boldsymbol{x} \mid \boldsymbol{S}_{\mathbf{1}}+\boldsymbol{x} \subseteq \boldsymbol{X} \quad \text { and } \quad \boldsymbol{S}_{\mathbf{2}}+\boldsymbol{x} \subseteq \boldsymbol{X}^{\boldsymbol{C}}\right\}\end{array} X?S=(X?S1?)(XC?S2?)X?S=(X?S1?)(XC?S 2?)X?S={xS1?+x?X?and?S2?+x?XC}?

當(dāng)且僅當(dāng)結(jié)構(gòu)元素 S 1 S_{1} S1?平移到某一點(diǎn)可填入集合 X X X的內(nèi)部,結(jié)構(gòu)元素 S 2 S_{2} S2?平移到該點(diǎn)可填入集合 的外部時(shí),該點(diǎn)才在擊中擊不中變換的輸出中

例如下圖,(a)為由四個(gè)物體:矩形、小方形、大方形、帶有小凸出部分的大方形組成的圖像 X X X;(b)為結(jié)構(gòu)元素對(duì) S = ( S 1 , S 2 ) S=(S_{1},S_{2}) S=(S1?,S2?)。要求通過(guò)擊中與否運(yùn)算,能正確識(shí)別方形

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

效果如下

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(2)程序

如下

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理


matlab實(shí)現(xiàn)

Image=imread('test.bmp');
BW=im2bw(Image);                 
interval=[-1  -1  -1  -1  -1
                  -1  -1  -1  -1  -1
                  -1  -1  1   1   1
                  -1  -1  1   1   1
                  -1  -1  1   1   1];      %定義結(jié)構(gòu)元素對(duì)
result=bwhitmiss(BW,interval);   %擊中擊不中
figure,imshow(result); title('擊中與否變換結(jié)果');

python實(shí)現(xiàn)

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖像
Image = cv2.imread('coin.bmp', cv2.IMREAD_GRAYSCALE)

# 二值化處理
_, BW = cv2.threshold(Image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 顯示二值圖像
plt.imshow(BW, cmap='gray')
plt.title('二值圖像')
plt.show()

# 區(qū)域填充
result1 = cv2.fillHoles(BW)

# 顯示區(qū)域填充結(jié)果
plt.imshow(result1, cmap='gray')
plt.title('二值圖像的區(qū)域填充')
plt.show()

六:細(xì)化

(1)概述

細(xì)化:骨架化結(jié)構(gòu)是目標(biāo)圖像的重要拓?fù)涿枋?。?duì)目標(biāo)圖像進(jìn)行細(xì)化處理,就是求圖像的中央骨架的過(guò)程,是將圖像上的文字、曲線(xiàn)、直線(xiàn)等幾何元素的線(xiàn)條沿著其中心軸線(xiàn)將其細(xì)化成一個(gè)像素寬的線(xiàn)條的處理過(guò)程?;跀?shù)學(xué)形態(tài)學(xué)變換的細(xì)化算法為

X ⊙ S = X ? ( X ? S ) \boldsymbol{X} \odot \boldsymbol{S}=\boldsymbol{X}-(\boldsymbol{X} * \boldsymbol{S}) XS=X?(X?S)

可見(jiàn),細(xì)化實(shí)際上為從集合 X X X中去掉被結(jié)構(gòu)元素 S S S擊中的結(jié)果。具體采用的細(xì)化方法為

X 1 = X ⊙ S , X 2 = X 1 ⊙ S , ? ? X n = X n ? 1 ⊙ S \boldsymbol{X}_{\mathbf{1}}=\boldsymbol{X} \odot \boldsymbol{S}, \boldsymbol{X}_{\mathbf{2}}=\boldsymbol{X}_{\mathbf{1}} \odot \boldsymbol{S}, \cdots \cdots \boldsymbol{X}_{n}=\boldsymbol{X}_{n-1} \odot \boldsymbol{S} X1?=XS,X2?=X1?S,??Xn?=Xn?1?S

如下示例

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理

(2)程序

如下

(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理


matlab實(shí)現(xiàn)

Image=imread('menu.bmp');
BW=im2bw(Image); 
result1=bwmorph(BW,'thin',1); 
result2=bwmorph(BW,'thin',Inf); 
figure,imshow(result1);title('細(xì)化一次');
figure,imshow(result2);title('細(xì)化至只有一個(gè)像素寬');

python實(shí)現(xiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-475615.html

Image=imread('menu.bmp');
BW=im2bw(Image); 
result1=bwmorph(BW,'thin',1); 
result2=bwmorph(BW,'thin',Inf); 
figure,imshow(result1);title('細(xì)化一次');
figure,imshow(result2);title('細(xì)化至只有一個(gè)像素寬');

到了這里,關(guān)于(數(shù)字圖像處理MATLAB+Python)第九章圖像形態(tài)學(xué)運(yùn)算-第三節(jié):二值圖像的形態(tài)學(xué)處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包