Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 图像抽取后的异常直方图_Python_Image Processing_Numpy - Fatal编程技术网

Python 图像抽取后的异常直方图

Python 图像抽取后的异常直方图,python,image-processing,numpy,Python,Image Processing,Numpy,在使用:img_decim_arr=img_arr[::2,::2]进行简单的图像抽取后,我得到了与原始图像直方图非常相似的直方图: 使用:skimage.measure.block\u reduce(img\u arr,block\u size=(2,2),func=np.mean)(2x2 block average)进行抽取,这是推荐的下采样方法(在一些讨论中可以在stackoverflow上找到)生成非常具有特征的直方图: 每秒钟的垃圾桶都更大。我不确定这可能是由于某种锯齿效应。谁能

在使用:
img_decim_arr=img_arr[::2,::2]
进行简单的图像抽取后,我得到了与原始图像直方图非常相似的直方图:
使用:
skimage.measure.block\u reduce(img\u arr,block\u size=(2,2),func=np.mean)
(2x2 block average)进行抽取,这是推荐的下采样方法(在一些讨论中可以在stackoverflow上找到)生成非常具有特征的直方图:

每秒钟的垃圾桶都更大。我不确定这可能是由于某种锯齿效应。谁能解释一下下采样如何影响图像(2D信号)直方图并给出一些理论提示吗?

问题在于
np.mean
函数,因为它不舍入整数并返回浮点数

import numpy as np
import skimage.measure

a = (10 * np.random.randn(10,10) + 127).astype(np.uint8)
a
Out[4]: 
array([[121, 124, 139, 129, 130, 114, 127,  96, 114, 135],
       [127, 132, 102, 142, 119, 107, 138, 130, 141, 132],
       [113, 132, 132, 118, 121, 120, 142, 115, 124, 128],
       [127, 121, 129, 129, 121, 119, 126, 113, 128, 116],
       [144, 131, 123, 131, 130, 137, 140, 142, 127, 128],
       [127, 126, 124, 115, 127, 125, 122, 126, 147, 132],
       [118, 119, 117, 117, 133, 149, 122, 120, 116, 138],
       [147, 147, 127, 117, 123, 123, 136, 121, 139, 129],
       [142, 129, 113, 111, 130, 116, 137, 127, 106, 148],
       [132, 141, 141, 142, 119, 132, 126, 115, 131, 122]], dtype=uint8)

b = skimage.measure.block_reduce(a, block_size = (2,2), func=np.mean)
b
Out[6]: 
array([[ 126.  ,  128.  ,  117.5 ,  122.75,  130.5 ],
       [ 123.25,  127.  ,  120.25,  124.  ,  124.  ],
       [ 132.  ,  123.25,  129.75,  132.5 ,  133.5 ],
       [ 132.75,  119.5 ,  132.  ,  124.75,  130.5 ],
       [ 136.  ,  126.75,  124.25,  126.25,  126.75]])
这可能会给你自己的逻辑带来有趣的副作用。它肯定与matplotlibs直方图函数有关,因为具有浮动使它对如何放置容器边界有不同的思考

看看这个:

a = (10 * np.random.randn(200,200) + 127).astype(np.uint8)
b = skimage.measure.block_reduce(a, block_size = (2,2), func=np.mean)
hist(b.ravel(), bins=255)

hist
函数返回的数组中,白色位实际上为零。如果在我的玩具示例中强制取整,情况会变得更糟:

hist(b.ravel().astype(np.uint8), bins=255)

给它一个箱子和范围就解决了这个问题。即使你缩小距离

 hist(b.ravel().astype(np.uint8), bins=255, range=(0,255))


绘制的数据是离散的吗?当为离散数据选择太小的存储箱时,可能会产生令人讨厌的视觉效果。我会尝试更改存储单元的数量,看看这是否会消除这种影响。是的,图像颜色空间为8位灰度,因此存储单元的数量为256,每种强度对应一个。