使用 Skimage 分割图像

sti*_*ool 1 python split scikit-image

我希望能够使用 skimage 来生成第四张图像。

我能找到的就是裁剪图像,但是我想要第四个图像,而不仅仅是裁剪部分图像。我需要将其第四次以便能够与其他图像进行比较以获得对称性。

我该怎么办?

如果我找不到分割它的函数或方法,我的思考过程之一就是手动找到垂直线和水平线,然后使用这些值作为切片索引进行裁剪。

height, width = size(image)
vertical = height / 2
horizontal = width / 2
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Jua*_*uan 5

在 scikit-image 中,图像只是 NumPy 数组,因此您应该使用 NumPy 切片:

from skimage import data
import matplotlib.pyplot as plt

image = data.camera()

nrows, ncols = image.shape
rsplit, csplit = nrows // 2, ncols // 2

quadrants = [
    image[:rsplit, :csplit],
    image[:rsplit, csplit:],
    image[rsplit:, :csplit],
    image[rsplit:, csplit:],
]

fig, axes = plt.subplots(2, 2)

for quadrant, ax in zip(quadrants, axes.flat):
    ax.imshow(quadrant, cmap='gray')
    ax.set_axis_off()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当且仅当您确定图像的行数和列数是偶数时,您可以使用以下方法获得象限skimage.util.view_as_blocks

from skimage.util import view_as_blocks

quadrants = view_as_blocks(image, (rsplit, csplit)).reshape(
    (4, rsplit, csplit)
)
Run Code Online (Sandbox Code Playgroud)