gpt4 book ai didi

python - 使用边界规则选择感兴趣区域

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:08 25 4
gpt4 key购买 nike

我想在图像中的每个像素周围提取一个小窗口。当然,我可以使用 Python 列表切片来实现这一点。但是,列表切片本身并不能解决“边缘情况”,即像素周围根本不存在大小为 W 的窗口,因为它靠近边缘。考虑简单矩阵 M

1 1 1 1
1 1 1 1
1 1 1 1

如果我想在 M(1,1) 周围选择一个大小为 3x3 的窗口,我将无法做到,因为它上方或左侧没有任何东西。

Skimage 中是否有 Numpy 函数或其他函数允许我指定当列表索引超出范围时会发生什么?例如,如果我只想复制最近的邻居怎么办?

我当然可以自己编写这个逻辑,因为这是一个简单的算法。我只是想知道 Numpy、Skimage、OpenCV 等是否已经存在这样的选项。

最佳答案

通常你先填充图像,通过 np.pad() (docs)cv2.copyMakeBorder() (docs)并根据填充的大小移动要选择的索引。这两个函数的好处是它们提供了很多不同的选项,可以选择填充图像的值。 Numpy 有更多选项,但您想要使用的大多数标准选项(重复边缘像素、镜像边缘像素、环绕边缘像素或恒定填充)在两个库中都可用。

numpy 边框类型直接列在文档中,但我会在这里复制它们:

mode : str or function
One of the following string values or a user supplied function.

‘constant’
Pads with a constant value.

‘edge’
Pads with the edge values of array.

‘linear_ramp’
Pads with the linear ramp between end_value and the array edge value.

‘maximum’
Pads with the maximum value of all or part of the vector along each axis.

‘mean’
Pads with the mean value of all or part of the vector along each axis.

‘median’
Pads with the median value of all or part of the vector along each axis.

‘minimum’
Pads with the minimum value of all or part of the vector along each axis.

‘reflect’
Pads with the reflection of the vector mirrored on the first and last values of the vector along each axis.

‘symmetric’
Pads with the reflection of the vector mirrored along the edge of the array.

‘wrap’
Pads with the wrap of the vector along the axis. The first values are used to pad the end and the end values are used to pad the beginning.

<function>
Padding function, see Notes.

它对传入的任意函数进行了进一步注释,这是一个很酷的功能。

copyMakeBorder() 文档中没有直接指定 OpenCV 边框类型,但您可以通过搜索 border types on the docs 找到它们。 .同样,只是为了让他们在 SO 上:

BORDER_CONSTANT 
Python: cv.BORDER_CONSTANT
iiiiii|abcdefgh|iiiiiii with some specified i

BORDER_REPLICATE
Python: cv.BORDER_REPLICATE
aaaaaa|abcdefgh|hhhhhhh

BORDER_REFLECT
Python: cv.BORDER_REFLECT
fedcba|abcdefgh|hgfedcb

BORDER_WRAP
Python: cv.BORDER_WRAP
cdefgh|abcdefgh|abcdefg

BORDER_REFLECT_101
Python: cv.BORDER_REFLECT_101
gfedcb|abcdefgh|gfedcba

BORDER_TRANSPARENT
Python: cv.BORDER_TRANSPARENT
uvwxyz|abcdefgh|ijklmno

BORDER_REFLECT101
Python: cv.BORDER_REFLECT101
same as BORDER_REFLECT_101

BORDER_DEFAULT
Python: cv.BORDER_DEFAULT
same as BORDER_REFLECT_101

BORDER_ISOLATED
Python: cv.BORDER_ISOLATED
do not look outside of ROI

关于python - 使用边界规则选择感兴趣区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com