簡體   English   中英

如何在二進制數組中找到鄰居像素的數量

[英]How to find the number of neighbours pixels in binary array

當原始圖像相同但綠色像素為黑色時,我正在尋找一種簡單的方法來計算下圖中綠色像素的數量。

我用 numpy.diff() 嘗試過,但后來我計算了一些像素兩次。 我想過 numpy.gradient() - 但在這里我不確定它是否是正確的工具。

我知道這個問題必須有很多解決方案,但我不知道如何谷歌搜索。 我正在尋找 python 中的解決方案。

在此處輸入圖片說明

編輯:為了更清楚,我只有一張圖像(只有黑白像素)。 帶有綠色像素的圖像僅用於說明。

您可以使用邊緣檢測內核來解決這個問題。

import numpy as np
from scipy.ndimage import convolve

a = np.array([[0, 0, 0, 0],
              [0, 1, 1, 1],
              [0, 1, 1, 1]])

kernel = np.array([[-1, -1, -1],
                   [-1,  8, -1],
                   [-1, -1, -1]])

然后,我們將原始數組與內核進行卷積。 請注意,邊緣都是負的。

>>> convolve(a, kernel)
[[-1 -2 -3 -3]
 [-2  5  3  3]
 [-3  3  0  0]]

我們將計算負值的數量並得到結果。

>>> np.where(convolve(a, kernel) < 0, 1, 0)
[[1 1 1 1]
 [1 0 0 0]
 [1 0 0 0]]

>>> np.sum(np.where(convolve(a, kernel) < 0, 1, 0))
6

僅邊緣內核

你可以用內核做很多事情。 例如,如果您不想包含對角線鄰居,則可以修改內核。

kernel = np.array([[ 0, -1,  0],
                   [-1,  4, -1],
                   [ 0, -1,  0]])

這給出了以下輸出。

>>> np.where(convolve(a, kernel) < 0, 1, 0)
[[0 1 1 1]
 [1 0 0 0]
 [1 0 0 0]]

>>> np.sum(np.where(convolve(a, kernel) < 0, 1, 0))
5

讀取圖像

在此處輸入圖片說明

找到綠色代碼在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM