如何解决如何修复在我自己的图像上运行本地 Otsu 阈值示例的错误?
我基本上是在尝试预处理图像以获得更好的 OCR 识别。我决定使用 scikit-image
(或者我应该使用其他东西)?
我正在按照此处显示的示例进行操作:
https://scikit-image.org/docs/stable/auto_examples/applications/plot_thresholding.html#id4
而且,我已经下载了这个脚本:
为了用我自己的图像测试它,我已经替换了这一行
img = img_as_ubyte(data.page())
这样:
from skimage import io
img = img_as_ubyte(io.imread('test.jpg'))
但是,我收到此错误:
File "/Users/janine/Downloads/test.py",line 207,in <module>
local_otsu = rank.otsu(img,selem)
File "/usr/local/lib/python3.9/site-packages/skimage/filters/rank/generic.py",line 1399,in otsu
return _apply_scalar_per_pixel_3D(generic_cy._otsu_3D,image,File "/usr/local/lib/python3.9/site-packages/skimage/filters/rank/generic.py",line 278,in _apply_scalar_per_pixel_3D
image,selem,out,mask,n_bins = _handle_input_3D(image,line 199,in _handle_input_3D
raise ValueError('Image dimensions and neighborhood dimensions'
ValueError: Image dimensions and neighborhood dimensionsdo not match
我尝试了多个图像,所以问题不是图像。
解决方法
检查 data.page()
,我们注意到该图像是单通道(即灰度)图像。在后面的链接示例中,您可以像这样设置结构元素 selem
:
selem = disk(radius)
请注意,skimage.morphology.disk
是一个“2D 结构元素”,只能用于“2D 图像”,即灰度图像。
很可能,您的 test.jpg
现在是三通道(即彩色)图像,因此是“3D 图像”。将 disk
等“2D 结构元素”与“3D 图像”结合使用时,会出现给定的错误。
现在,您有两个选择:
- 只需在
skimage.io.imread
中设置as_gray=True
,即可将输入的彩色图像转换为某种灰度图像。然后,您可以按原样使用其余代码。 - 使用一些“3D 结构元素”,例如
skimage.morphology.ball
,它相当于disk
的 3D,按原样使用您的输入图像。
这里有一些最小的代码供参考:
from matplotlib import pyplot as plt
from skimage.filters import rank
from skimage.io import imread
from skimage.morphology import ball,disk
from skimage.util import img_as_ubyte
# Option #1: 2D image (e.g. grayscale input image),and 2D structuring element
img = img_as_ubyte(imread('path/to/your/image.png',as_gray=True))
radius = 15
selem = disk(radius)
local_otsu = rank.otsu(img,selem)
plt.figure(1)
plt.imshow(local_otsu,vmin=0,vmax=255,cmap='gray')
# Option #2: 3D image (original input image),and 3D structuring element
img = img_as_ubyte(imread('path/to/your/image.png'))
radius = 15
selem = ball(radius)
local_otsu = rank.otsu(img,selem)
plt.figure(2)
plt.imshow(local_otsu,vmax=255)
plt.show()
而且,两个结果输出:
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.19041-SP0
Python: 3.9.1
PyCharm: 2021.1.1
Matplotlib: 3.4.1
scikit-image: 0.18.1
----------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。