PythonとOpenCVを使って画像の閾値処理(二値化処理)を実装する方法

スポンサーリンク

今日は、画像の閾値処理とは何か、そしてどのようにpythonプログラミング言語で同じものを実装するかを理解しようと思います。

さっそくその概念に触れてみましょう。

こちらもご覧ください。

Pythonを使った画像のエッジ検出。

スポンサーリンク

画像の閾値処理とは?

閾値処理とは、画像を前景と背景の2つに分割する処理です。

「前景 “と “背景 “の2つの部分に分割するプロセスであると定義されています。

これは、様々な画像処理タスクで使用され、より高度な画像認識やセグメンテーションなどを可能にします。

様々な種類の閾値処理技術


以下のような様々な閾値技術を実装することができます

S.No. 閾値処理技術名|機能名|説明|||1|バイナリ閾値処理
1|バイナリ閾値処理|cv2.THRESHEE_BINARY|1.(ピクセル強度) > set threshold : 255 (white)2.Else set to 0 (black).
2 Binary Inverted Thresholding cv2.THRESH_BINARY_INV cv2.THRESH_BINARY の逆のケース.
3 Tozero Thresholding cv2.THRESHG_TOZERO 1. (ピクセル強度) < しきい値 : 0 (黒)に設定する 2. それ以外の場合は白に設定|4|Tozero Inverted
4 Tozero Inverted Thresholding cv2.THRESH_TOZERO_INV cv2.THRESH_TOZERO と逆の場合.
5 Truncated Thresholding cv2.THRESHG_TRUNC 1. ( ピクセル強度 ) > しきい値.閾値まで切り捨て.2. 画素値は,閾値と同じになるように設定されます.3. それ以外の値はそのまま。

さまざまな閾値処理技術

こちらもお読みください。

フルコード

閾値メソッドは実装のための直接的な関数を持っているので、閾値メソッドのコード実装を直接見ることができます。

同じようにコーディング実装を理解していただければと思います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import cv2 
import numpy as np
 
img = cv2.imread('lori.jpg'
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
ret, thresh_hold = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)
ret, thresh_hold1 = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV)
ret, thresh_hold2 = cv2.threshold(img, 100, 255, cv2.THRESH_TOZERO)
ret, thresh_hold3 = cv2.threshold(img, 100, 255, cv2.THRESH_TOZERO_INV)
ret, thresh_hold4 = cv2.threshold(img, 100, 255, cv2.THRESH_TRUNC)  
 
thresh_hold = cv2.resize(thresh_hold, (960, 540))   
cv2.imshow('Binary Threshold Image', thresh_hold)
 
thresh_hold1 = cv2.resize(thresh_hold1, (960, 540))   
cv2.imshow('Binary Threshold Inverted Image', thresh_hold1)
 
thresh_hold2 = cv2.resize(thresh_hold2, (960, 540))   
cv2.imshow('Threshold Tozero Image', thresh_hold2)
 
thresh_hold3 = cv2.resize(thresh_hold3, (960, 540))   
cv2.imshow('ThresholdTozero Inverted output', thresh_hold3)
 
thresh_hold4= cv2.resize(thresh_hold4, (960, 540))   
cv2.imshow('Truncated Threshold output', thresh_hold4)
 
if cv2.waitKey(0) & 0xff == 25
    cv2.destroyAllWindows()

サンプル出力 – 1

1. オリジナル画像出力

Lori
Lori

2. 2値閾値画像出力

Binary Threshold Image
Binary Threshold Image

3. 2値化逆しきい値画像出力

Binary Inverted Threshold Image
Binary Inverted Threshold Image

4. しきい値トゼロ出力

Threshold Tozero Image
Threshold Tozero Image

5. しきい値トゼロ反転出力

Threshold Tozero Inverted Image
Threshold Tozero Inverted Image

6. しきい値切り捨て画像出力

Truncated Threshold Image
Truncated Threshold Image

サンプル出力 – 2

Threshold Sample Output 2
Threshold Sample Output 2

まとめ

最後に、皆さんもいろいろな画像を自分で閾値処理してみて、いろいろな画像でどのような出力が得られるか見てみてください。

お読みいただきありがとうございました。

タイトルとURLをコピーしました