【发布时间】:2013-12-03 20:39:31
【问题描述】:
我正在尝试在 python 中进行一些图像分析(我必须使用 python)。我需要同时进行全局和局部直方图均衡。全球版本运行良好,但使用 7x7 占用空间的本地版本效果很差。
这是全球版本:
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from scipy import ndimage,misc
import scipy.io as io
from scipy.misc import toimage
import numpy as n
import pylab as py
from numpy import *
mat = io.loadmat('image.mat')
image=mat['imageD']
def histeq(im,nbr_bins=256):
#get image histogram
imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)
cdf = imhist.cumsum() #cumulative distribution function
cdf = 0.6 * cdf / cdf[-1] #normalize
#use linear interpolation of cdf to find new pixel values
im2 = interp(im.flatten(),bins[:-1],cdf)
#returns image and cumulative histogram used to map
return im2.reshape(im.shape), cdf
im=image
im2,cdf = histeq(im)
要制作本地版本,我正在尝试使用这样的通用过滤器(使用与之前加载的相同图像):
def func(x):
cdf=[]
xhist,bins=histogram(x,256,normed=True)
cdf = xhist.cumsum()
cdf = 0.6 * cdf / cdf[-1]
im_out = interp(x,bins[:-1],cdf)
midval=interp(x[24],bins[:-1],cdf)
return midval
print im.shape
im3=ndimage.filters.generic_filter(im, func,size=im.shape,footprint=n.ones((7,7)))
是否有人对为什么第二个版本不起作用有任何建议/想法?我真的被困住了,任何 cmets 将不胜感激!提前致谢!
【问题讨论】:
-
我想知道这是否与 7x7=49 并且您使用 256 个 bin 的事实有关。
-
我考虑过...我尝试使用 49,但没有太大改进。但我认为它应该是 256,因为 cdf 应该是每个亮度值有多少像素的累积总和,所以按像素值而不是像素数进行分箱是有意义的(我认为?!)。感谢您的意见!
-
@user3011255: 如果你像
7bins 一样使用呢?
标签: python image numpy filter histogram