skimage.segmentation.slic() 到底代表什么?

What exactly does skimage.segmentation.slic() represent?

我正在研究复制移动伪造检测并卡在其中一种算法上。 我有一张 532x800 像素的 RGB 图像。

当下面代码为运行时:

import matplotlib.pyplot as plt
from skimage.segmentation import slic, mark_boundaries
from skimage.util import img_as_float
from skimage import io

img_rgb = img_as_float(io.imread(PATH))
segments = slic(image=img_rgb, n_segments=1000)
print(img_rgb.shape)
print(segments.shape)
img_rgb = mark_boundaries(image=img_rgb, label_img=segments)
plt.imshow(img_rgb)
plt.show()

它returns:

(532, 800, 3)
(532, 800)

和这张图片: output_image.

由于输入图像和变量'segments'具有相同的维度(第3通道维度除外),

  1. 为什么它们的尺寸相同?
  2. 'img_rgb' 3D 矩阵中的不同值表示颜色强度。变量 'segments' 中的值代表什么?它们如何被相似地解释?

感谢您的意见。

编辑:我知道它 returns 是一个 numpy 数组。我很想知道它代表什么。

找到我要找的东西。

这是我写的代码

import matplotlib.pyplot as plt
from skimage.segmentation import slic, mark_boundaries
from skimage.util import img_as_float
from skimage import io
from skimage.transform import resize
import numpy as np

img_rgb = img_as_float(io.imread("apple_32x32.png"))
img_rgb = resize(image=img_rgb, output_shape=(32, 32, 3))

segments = slic(image=img_rgb, n_segments=10)
print(img_rgb.shape)
print(segments.shape)
img_rgb = mark_boundaries(image=img_rgb, label_img=segments)
plt.imshow(img_rgb)
plt.show()

np.savetxt("segments.txt", segments, fmt='%i')

它输出这张图片: output_image.

并将此发送到控制台:

(32, 32, 3)
(32, 32)

并将变量'segments'写入文件'segments.txt'。文件内容如下图:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 2 2 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 3 3 3 3 3 3 1 1 1 1 1
0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1
0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 1 1 1 1 1
4 4 4 4 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 1 1 1 1 1
4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5
4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5
4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5
4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5
4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5
4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5
4 4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 5 5 5
4 4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 5 5 5 5
4 4 4 4 4 4 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 5 5 5 5 5
4 4 4 4 4 4 4 3 3 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 5 5 5 5 5 5
4 4 4 4 4 4 4 3 3 3 3 3 2 2 2 2 2 2 2 3 3 3 3 3 3 3 5 5 5 5 5 5
4 4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2 3 3 3 3 3 3 3 5 5 5 5 5 5
4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5
4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5
4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5
4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5

如您所见,变量 'segments' 与输入图像的大小相同。 但是segments[i,j]的每一个值代表图像的像素[i,j]属于哪个簇。