具有多个阈值的ImageProcessing在skimage.io的imread()上二值化阶段

时间:2017-09-04 10:27:30

标签: python numpy image-processing

我试图弄清楚如何在其直方图强度上对RGB.png文件进行二值化。

Example: smoothed RGB intensities with estimated thresholds for R,G,B

到目前为止,我可以将一个强度范围的阈值应用于<和>运算符使用以下代码:(如果我想知道为什么它不是 img< thres1 for phase1 ..)

from skimage.io import imread
img=imread('example.png')
#intensitys
thres1 = 30
thres2 = 80
#calculate
phase1 = img > thres1
phase3 = img < thres2

现在我尝试用几种方法获得强度 thres1 thres2 之间的像素,例如:

phase2 = thres1 < img < thres2
#also
phase2 = thres1<img & img < thres2
#and
phase2 = thres1<img
phase2 = thres2>phase2

虽然这个操作给了我以下ValueError: 具有多个元素的数组的真值是不明确的。使用a.any()或a.all() 我也尝试用a.any()和a.all()来处理这种情况,我没有得到任何有用的结果。

使用phase2 = np.logical_and(thres1 < img,img < thres2)错误地将阶段3包括在阶段2中;

phase2 = np.logical_and(thres1 < img,img > thres2)错误地将阶段1包括在阶段2中。

Example: plot of generated image arrays for phase2 = np.logical_and(thres1 < img,img > thres2)

是否有可能通过在两个强度值之间绘制所有像素来创建多个阈值参数的图片?

1 个答案:

答案 0 :(得分:0)

在尝试了很多事情之后,逆操作员得到了它。 它看起来像是

&#34;给我所有像素,不包括在phase1,phase3和#34;

phase2 = ~(np.logical_and(phase1,phase3))

需要超过3个阶段,我仍然不知道如何处理这个......