为什么skimage中的'imshow'在移位时无法正常工作

时间:2019-11-23 08:38:27

标签: python scikit-image

我试图用移位方法显示位平面图像。 但是,对于所有子图,我总是得到全黑图像。

import skimage.io as io  
import skimage.util as util  
import numpy as np  
from matplotlib import pyplot as plt  
from skimage.color import rgb2gray  
import skimage.filters as fl  

path = 'D:/Users/user/PycharmProjects/Image_Processing/Data/16.png'
w = io.imread(path)  

# convert the colorful image to a grey scale image  
gray = rgb2gray(w)  
plt.imshow(gray, cmap=plt.get_cmap('gray'), vmin=0, vmax=1)  
plt.show()  

# bit shift for creating bit plane images  
bps = [(np.uint8(gray) >> i) % 2 for i in range(8)]  

# plot 8 subplots to show the result  
for i in range(8):  
    plt.subplot(3, 3, i+1)  
# add color map to assure the present color is in grey scale  
    io.imshow(bps[i], , cmap=plt.get_cmap('gray'))  
    plt.axis('off')  
    plt.show()  

Original grey scale picture

Result

执行结果也会有一些警告:

  

D:\ Users \ user \ Anaconda3 \ python.exe D:/Users/user/PycharmProjects/Image_Processing/read_image.py   D:\ Users \ user \ Anaconda3 \ lib \ site-packages \ skimage \ io_plugins \ matplotlib_plugin.py:75:UserWarning:图片数据范围低;显示具有拉伸对比度的图像。     warn(“图像数据范围低;用”

显示图像      

以退出代码0结束的过程

顺便说一句,如果我使用了otsu,yen,li中的过滤器和阈值。 我会得到预期的结果。

thresh = fl.threshold_otsu(gray)
binary = gray >= thresh
io.imshow(binary)
plt.show()

您能告诉我原始方法在哪里出错吗? 在其他一些线程中,提到了将图片从一种类别转换为另一种类别的损失。 而且,我也可以通过使用纯opencv方法获得成功的结果。

我已经检查了以下相关线程,但是我仍然不知道如何解决此问题:

skimage issue

bit plane slicing

threshold method

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我发现我滥用了numpy无符号整数转换,因为原始的灰色数组包含0到1之间的无符号浮点数。 首先,我需要将灰度强度设置为大于1的浮点数。

bps = [(np.uint8(gray*255) >> i) % 2 for i in range(8)] 

然后,问题解决了。