Mahotas 简明教程
Mahotas - Riddler-Calvard Method
Riddler-Calvard 方法是一种用于将图像分割为前景和背景区域的技术。它将图像的像素分组以最大程度地减少计算阈值时的类内方差。
The Riddler−Calvard method is a technique used for segmenting an image into foreground and background regions. It groups the pixels of the image to minimize the within−cluster variance when calculating threshold value.
类内方差衡量像素值在组内的分散程度。较低的类内方差表明像素值彼此接近,而较高的类内方差表明像素值分散。
The within−cluster variance measures how spread out the pixel values are within a group. A low within−cluster variance indicates that the pixel values are close together, while a high within−cluster variance indicates that the pixel values are spread out.
Riddler-Calvard Method in Mahotas
在 Mahotas 中,我们使用 thresholding.rc() 函数使用 Riddler-Calvard 技术计算图像的阈值。该函数按以下方式运行 -
In Mahotas, we use the thresholding.rc() function to calculate the threshold value of an image using the Riddler−Calvard technique. The function operates in the following manner −
-
It calculates the mean and variance of the two clusters − the foreground and the background. The mean value is the average value of all the pixels and the variance is a measure of spread of the pixels.
-
Next, it chooses a threshold value that minimizes the within−cluster variance.
-
It then assigns each pixel to the cluster with the lower variance.
步骤 2 和 3 重复进行,直到计算出阈值。然后使用此值将图像分割为前景和背景。
Steps 2 and 3 continuously repeated until the threshold value is calculated. This value is then used to segment an image into the foreground and the background.
The mahotas.thresholding.rc() function
mahotas.thresholding.rc() 函数以灰度图像作为输入,并使用 Riddler-Calvard 技术返回其计算出的阈值。
The mahotas.thresholding.rc() function takes a grayscale image as input and returns its threshold value calculated using the Riddler−Calvard technique.
然后将灰度图像的像素与阈值进行比较以创建二进制图像。
The pixels of the grayscale image are then compared to the threshold value to create a binary image.
以下为 mahotas 中 rc() 函数的基本语法:
Following is the basic syntax of the rc() function in mahotas −
mahotas.thresholding.rc(img, ignore_zeros=False)
其中,
Where,
-
img − It is the input grayscale image.
-
ignore_zeros (optional) − It is a flag which specifies whether to ignore zero valued pixels (default is false).
在以下示例中,我们使用 mh.thresholding.rc() 函数查找阈值。
In the following example, we are using the mh.thresholding.rc() function to find the threshold value.
import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sun.png')
# Converting it to grayscale
image = mh.colors.rgb2gray(image).astype(np.uint8)
# Calculating threshold value using Riddler-Calvard method
rc_threshold = mh.thresholding.rc(image)
# Creating image from the threshold value
final_image = image > rc_threshold
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the threshold image
axes[1].imshow(final_image, cmap='gray')
axes[1].set_title('Riddler-Calvard Threshold Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
以下是上面代码的输出: -
Following is the output of the above code −
Ignoring the Zero Valued Pixels
我们还可以通过忽略零值像素来查找 Riddler-Calvard 阈值。零值像素是指强度值为 0 的像素。
We can also find the Riddler−Calvard threshold value by ignoring the zero valued pixels. The zero valued pixels are pixels that have an intensity value of 0.
它们通常表示图像的背景像素,但在某些图像中,它们也可能表示噪声。
They usually represent the background pixels of an image, but in some images, they may also represent noise.
在灰度图像中,零值像素是表示为颜色“黑色”的像素。
In grayscale images, zero valued pixels are pixels represented by the color 'black'.
要在 mahotas 中计算阈值时排除零值像素,我们可以将 ignore_zeros 参数设置为布尔值“True”。
To exclude zero valued pixels when calculating the threshold value in mahotas, we can set the ignore_zeros parameter to the boolean value 'True'.
Example
在下面提到的示例中,我们计算阈值时忽略值等于零的像素,所用的是 Riddler-Calvard 方法。
In the example mentioned below, we are ignoring pixels with value zero when calculating the threshold value using the Riddler−Calvard method.
import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('nature.jpeg')
# Converting it to grayscale
image = mh.colors.rgb2gray(image).astype(np.uint8)
# Calculating threshold value using Riddler-Calvard method
rc_threshold = mh.thresholding.rc(image, ignore_zeros=True)
# Creating image from the threshold value
final_image = image > rc_threshold
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the threshold image
axes[1].imshow(final_image, cmap='gray')
axes[1].set_title('Riddler-Calvard Threshold Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
执行上面的代码后,我们得到以下输出: -
After executing the above code, we get the following output −