为什么Sobel过滤器返回黑色方块



我正试图使用skimage中的sobelprewitt滤波器进行边缘检测,以比较结果,但对于这两种滤波器,我只得到黑色方块!

这是我的代码:

import numpy as np
from skimage import filters
from PIL import Image
a=Image.open('F:/CT1.png').convert('L')
a.show()
a=np.asarray(a)
b=filters.sobel(a)
b=Image.fromarray(b)
b.show()

scikit-image中的大多数方法一样,sobel函数使用np.float64进行计算,从而将图像适当地转换为范围0.0 ... 1.0。下面,您的结果b也是具有相同范围内的值的np.float64类型。现在转换为某个PillowImage对象时,其模式设置为F,用于32位浮点像素

现在,Image.show上的文档告诉我们,例如:

在Windows上,使用标准PNG显示实用程序打开图像。

图像实际显示的文件格式(?(尚不清楚。看起来,它是PNG,至少根据临时文件名。但是,例如,将一些模式为FImage对象保存为PNG或JPG是不起作用的!所以,看起来,图像必须以某种方式转换才能显示。第一种猜测是,选择一些常规的8位图像作为默认图像,因为你得到了一个几乎全黑的图像,这表明值01被视为"0";非常黑";。事实上,当使用这样的东西时

b=Image.fromarray(b * 255)

当使用CCD_ 17时,Windows图像预览显示适当的图像。

因此,这将是显示的一个变通方法。

尽管如此,如果您想保存图像,您不一定需要转换,只需要使用适当的文件格式来存储这些32位信息,例如TIFF:

b=Image.fromarray(b)
b.save('b.tiff')

相关内容

  • 没有找到相关文章

最新更新