繁体   English   中英

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

[英]Why does the Sobel filter return a black square?

我正在尝试使用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 function 使用np.float64进行计算,从而将您的图像适当地转换为0.0... 1.0范围。 接下来,您的结果b也是np.float64类型,其值在同一范围内。 现在转换为某些 Pillow Image object 时,其模式设置为F ,用于32 位浮点像素

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

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

目前尚不清楚,图像实际以哪种文件格式(?)显示。 看起来,它是PNG,至少根据临时文件名。 但是,例如,将模式F的一些Image object 保存为 PNG 或 JPG 是行不通的,所以,看来。 必须以某种方式转换图像以使其可显示,第一个猜测是,默认选择了一些常规的 8 位图像,因为您得到几乎全黑的图像,表明值0和可能1被视为“非常暗”。 而且,事实上,当使用类似的东西时

b=Image.fromarray(b * 255)

Windows 图像预览在使用b.show()时显示正确的图像。

因此,这将是显示.

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM