[OpenCV][Python]使用 LBP(Local Binary Patterns)進行紋理分析和瑕疵檢測

更新於 發佈於 閱讀時間約 9 分鐘

使用 LBP(Local Binary Patterns) 進行紋理分析和瑕疵檢測

Local Binary Patterns(LBP) 是一種用來描述圖像紋理的特徵提取技術。LBP 對於檢測表面紋理的異常具有很好的效果,尤其在檢測紋理一致的材料表面(例如紡織品、紙張、金屬)時,LBP 非常有用。LBP 的優勢在於它的計算效率高,並且對光照變化不敏感。

實驗圖

raw-image


結果圖

raw-image

1. LBP 的基本概念

LBP 是基於局部像素的灰度值來描述紋理的,通過比較中心像素與其鄰域像素的大小關係,將鄰域像素的比較結果轉換為二進制數,並將這些二進制數轉換成一個整數值來表徵該像素的紋理。


運算的步驟可以參考這篇 我覺得在網路看到解釋得很清楚的文章

LBP 運算的步驟:

  • Step 1:對每個像素選擇一個 P 個鄰域像素,形成一個環(通常是 8 個像素),半徑為 R
  • Step 2:比較每個鄰域像素與中心像素的灰度值,如果鄰域像素的灰度值大於或等於中心像素,記為 1,否則記為 0。
  • Step 3:將這些二進制結果組成一個 8 位的二進制數,並將這個二進制數轉換為十進制數,這就是 LBP 值。
  • Step 4:用該 LBP 值替換原來的中心像素,得到一張新的 LBP 紋理圖。




2. LBP 適用場景

  • 紋理分析:LBP 被廣泛用於紋理分析和分類,尤其在表面檢測中,LBP 能夠有效檢測到紋理的細微變化。
  • 瑕疵檢測:當表面的紋理一致性很高時(例如布料、紙張),LBP 能檢測到表面不規則的紋理變化,如異常的斑點或凹凸不平的瑕疵。
  • 人臉識別:LBP 也被應用於人臉識別系統,通過提取人臉的紋理特徵進行分類。


3. LBP 的優勢

  • 簡單高效:LBP 的計算過程相對簡單,對於實時應用來說是高效的。
  • 光照不變性:LBP 對光照變化具有較好的穩健性,因為它主要基於像素之間的比較,而不是絕對灰度值。

函式說明

local_binary_pattern(image, n_points, radius, method='uniform') 中的參數,這裡是每個參數的詳細說明:

  • n_points 決定參與比較的鄰域像素數。
  • radius 決定鄰域的範圍。
  • method 選擇 LBP 模式,其中 uniform 模式減少了特徵數量,適合大多數應用。
  1. image
    這是要應用 LBP 的輸入圖像,通常是灰度圖像(2D numpy 陣列)。LBP 是基於圖像中的像素進行紋理特徵提取的,因此需要輸入灰度圖像。
  2. n_points
    鄰域像素的數量,定義了 LBP 運算時,與中心像素比較的像素數量。它的典型設置是 8 * radius,即圍繞中心像素的 n_points 個鄰域點會參與比較。增加這個數量可以使 LBP 更加敏感於大範圍的紋理變化。
  3. radius
    定義鄰域範圍的半徑,這是從中心像素到鄰域像素的距離。較大的半徑可以捕捉更大範圍的紋理變化,而較小的半徑則專注於更細小的紋理。常用的值包括 1, 2, 3 等。
  4. method='uniform'
    LBP 的模式選擇,'uniform' 表示使用統一模式(Uniform Pattern)。統一模式是指當 LBP 模式中的 0 和 1 之間的轉換次數不超過兩次時,該模式被稱為「統一」。統一模式能夠減少 LBP 特徵的數量,提高特徵的可分性和計算效率。其他可選模式包括:
    • 'default':標準的 LBP 模式,沒有特別的模式簡化。
    • 'ror':旋轉不變的 LBP 模式,對於旋轉的紋理,該模式能夠提供不變性。
    • 'var':變異模式,使用方差來衡量紋理的變化。

4. LBP 的實現與應用

skimage 庫來計算 LBP,並展示如何用 LBP 來檢測瑕疵。

import cv2
import numpy as np
from skimage.feature import local_binary_pattern
import matplotlib.pyplot as plt

# LBP 參數
radius = 2 # 增大半徑以擴展感知範圍
n_points = 8 * radius # 鄰域像素的數量

# 讀取灰度圖像
image_path = 'F:/python/crab/LBP/1111.png' # 替換成你的圖像路徑
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 使用高斯濾波來平滑背景紋理
image_smooth = cv2.GaussianBlur(image, (5, 5), 0)

# 計算 LBP 特徵,使用統一模式
lbp = local_binary_pattern(image_smooth, n_points, radius, method='uniform')

# 調整 LBP 的閾值
_, lbp_binary = cv2.threshold(lbp, 0.4 * lbp.max(), 255, cv2.THRESH_BINARY)

# 使用形態學操作清除噪點
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (15, 15))
lbp_clean = cv2.morphologyEx(lbp_binary, cv2.MORPH_OPEN, kernel)

# 畫出輪廓到原始圖像
output_image = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR) # 將灰度圖轉換為彩色以顯示輪廓
# 檢測瑕疵區域的輪廓
contours, _ = cv2.findContours(lbp_clean.astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 設置最小面積閾值(根據你的需求調整)
min_area = 1000
# 遍歷所有輪廓
for contour in contours:
area = cv2.contourArea(contour)
if area > min_area: # 如果輪廓面積大於閾值
# 計算輪廓的外接矩形
x, y, w, h = cv2.boundingRect(contour)
# 畫出矩形框
cv2.rectangle(output_image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 顯示結果
titles = ['Original Image', 'lbp', 'Binary LBP', 'Output with Contours and Rectangles']
images = [image, lbp, lbp_binary, output_image]

plt.figure(figsize=(10, 10)) # 調整窗口大小
for i in range(4):
plt.subplot(2, 2, i + 1)
if i == 3: # 最後一個是彩色圖像
plt.imshow(cv2.cvtColor(images[i], cv2.COLOR_BGR2RGB))
else:
plt.imshow(images[i], cmap='gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])

plt.show()

因應不同狀況可調整的部分

  • LBP 半徑 (radius) 和鄰域像素 (n_points):決定紋理感知範圍。
  • 高斯濾波核大小:決定背景平滑效果。
  • 二值化閾值:影響異常區域的檢測範圍。
  • 形態學結構元素:決定去噪效果及瑕疵形狀的處理。
  • 最小面積閾值:影響檢測瑕疵的最小大小。
  • 矩形框的顏色和厚度:影響可視化的顯示效果。








留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
150會員
294內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/04/29
1. 什麼是虛擬環境 (venv)? 虛擬環境就是讓你在同一台電腦上,可以為不同的專案建立「獨立」的 Python 環境,互不干擾。 例如:某個專案用 Dash 3.0.4,另一個用 Dash 4.0,不會互相影響。 2. 如何建立一個新的 venv? 打開終端機 Terminal / C
Thumbnail
2025/04/29
1. 什麼是虛擬環境 (venv)? 虛擬環境就是讓你在同一台電腦上,可以為不同的專案建立「獨立」的 Python 環境,互不干擾。 例如:某個專案用 Dash 3.0.4,另一個用 Dash 4.0,不會互相影響。 2. 如何建立一個新的 venv? 打開終端機 Terminal / C
Thumbnail
2025/04/27
位於台中市石岡區的【九房3D彩繪村】,是一個結合了3D立體彩繪藝術、社區故事、以及鄉村風情的小村落。 在東豐鐵馬道騎腳踏車時意外發現,雖然好像有點落寞的感覺,但牆上的圖還是栩栩如生。 小缺點就是壁畫相對地沒有那麼集中,不然是挺不賴的。 📍 九房3D彩繪村 基本資訊 地址:台中市石岡區
Thumbnail
2025/04/27
位於台中市石岡區的【九房3D彩繪村】,是一個結合了3D立體彩繪藝術、社區故事、以及鄉村風情的小村落。 在東豐鐵馬道騎腳踏車時意外發現,雖然好像有點落寞的感覺,但牆上的圖還是栩栩如生。 小缺點就是壁畫相對地沒有那麼集中,不然是挺不賴的。 📍 九房3D彩繪村 基本資訊 地址:台中市石岡區
Thumbnail
2025/04/26
(不可分)(可分)意思代表動詞片語可不可分開 ✅ break down — 故障 / 損壞(不可分) My car broke down on the highway. 我的車在高速公路上拋錨了。 The washing machine broke down again.
2025/04/26
(不可分)(可分)意思代表動詞片語可不可分開 ✅ break down — 故障 / 損壞(不可分) My car broke down on the highway. 我的車在高速公路上拋錨了。 The washing machine broke down again.
看更多
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
在電腦視覺應用中,輪廓(Contour)常用來描述物體的邊界。 當圖像中有雜訊或物體邊緣過於複雜時,我們可以利用輪廓逼近技術,將輪廓簡化成較少點數的多邊形,這不僅有助於後續的形狀分析,也能提高處理速度。 本文將介紹如何使用 OpenCV 中的 cv2.arcLength 與 cv2.approx
Thumbnail
在電腦視覺應用中,輪廓(Contour)常用來描述物體的邊界。 當圖像中有雜訊或物體邊緣過於複雜時,我們可以利用輪廓逼近技術,將輪廓簡化成較少點數的多邊形,這不僅有助於後續的形狀分析,也能提高處理速度。 本文將介紹如何使用 OpenCV 中的 cv2.arcLength 與 cv2.approx
Thumbnail
在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。
Thumbnail
在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。
Thumbnail
在OpenCV中可以利用 cv2.findContours 判斷物件的形狀,可以通過計算輪廓的某些特徵來實現的。 本文主要利用cv2.arcLength與cv2.approxPolyDP來判斷三角形,正方形,矩形。檢查是否為圓形,則用通過輪廓面積和邊界框面積的比率來判斷。
Thumbnail
在OpenCV中可以利用 cv2.findContours 判斷物件的形狀,可以通過計算輪廓的某些特徵來實現的。 本文主要利用cv2.arcLength與cv2.approxPolyDP來判斷三角形,正方形,矩形。檢查是否為圓形,則用通過輪廓面積和邊界框面積的比率來判斷。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文介紹OpenCV中的SimpleBlobDetector用於檢測斑點或圓,以及其與霍夫轉換找圓方法的差異。透過程式範例和解析,講解檢測到的關鍵點和設定參數,並整理SimpleBlobDetector與霍夫轉換的不同。最後,探討不同的應用場景和參數調整。
Thumbnail
本文介紹OpenCV中的SimpleBlobDetector用於檢測斑點或圓,以及其與霍夫轉換找圓方法的差異。透過程式範例和解析,講解檢測到的關鍵點和設定參數,並整理SimpleBlobDetector與霍夫轉換的不同。最後,探討不同的應用場景和參數調整。
Thumbnail
常常聽到影像處理、Python、OpenCV等技術,最近又在流行機器學習、深度學習、CNN、人工神經網路,常常不知從何開始學習,如果有一本書能把這些知識從頭到尾講清楚有多好,再加上如果有最常用的案例實作,一定可以完整將這個現在最賺錢行業的領域變成一技之長。
Thumbnail
常常聽到影像處理、Python、OpenCV等技術,最近又在流行機器學習、深度學習、CNN、人工神經網路,常常不知從何開始學習,如果有一本書能把這些知識從頭到尾講清楚有多好,再加上如果有最常用的案例實作,一定可以完整將這個現在最賺錢行業的領域變成一技之長。
Thumbnail
取得掌紋 圖片比對 後續思維... 透過特徵比對+CNN,以YOLO 或 TensorFlow+Keras進行會比較正確。 單靠OpneCV至此是極限,要判斷出各條線,沒模型,則要以numpy陣列加上相似度(哈希算法等)去做,整體上不好進行... 待續...
Thumbnail
取得掌紋 圖片比對 後續思維... 透過特徵比對+CNN,以YOLO 或 TensorFlow+Keras進行會比較正確。 單靠OpneCV至此是極限,要判斷出各條線,沒模型,則要以numpy陣列加上相似度(哈希算法等)去做,整體上不好進行... 待續...
Thumbnail
邊緣與輪廓檢測 edge detection
Thumbnail
邊緣與輪廓檢測 edge detection
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News