我正在尝试从Scikit Image网站获得的示例Python脚本之一。该脚本演示了本地Otsu细分。该脚本适用于使用
加载的图片data.page()
但不使用
io.imread
。有什么建议吗?
图片文件
实际输出-本地阈值窗口为空
如您所见,全局阈值有效,但是本地阈值未能产生任何结果。
奇怪的是,如果我使用data.page(),那么一切正常。
脚本
from skimage import io
from skimage.color import rgb2gray
import matplotlib.pyplot as plt
from skimage.filters import threshold_otsu,threshold_local
import matplotlib
from skimage import data
from skimage.util import img_as_ubyte
filename="C:\\Lenna.png"
mypic= img_as_ubyte (io.imread(filename))
#image = data.page() #This works - why not io.imread ?
imagefromfile=io.imread(filename)
image = rgb2gray(imagefromfile)
global_thresh = threshold_otsu(image)
binary_global = image > global_thresh
block_size = 35
local_thresh = threshold_local(image, block_size, offset=10)
binary_local = image > local_thresh
fig, axes = plt.subplots(nrows=3, figsize=(7, 8))
ax = axes.ravel()
plt.gray()
ax[0].imshow(image)
ax[0].set_title('Original')
ax[1].imshow(binary_global)
ax[1].set_title('Global thresholding')
ax[2].imshow(binary_local)
ax[2].set_title('Local thresholding')
for a in ax:
a.axis('off')
plt.show()
答案 0 :(得分:0)
如果加载lenna.png
并打印其形状,则会看到它是4通道RGBA图像,而不是3通道RGB图像。
print mypic.shape
(512, 512, 4)
我不确定您的代码的哪个部分适用于哪个图像,所以我不确定下一步要去哪里,但是我想您只想获取RGB部分并丢弃alpha:
RGB = mypic[...,:3]