图像处理的Python问题,怎么解决

Python017

图像处理的Python问题,怎么解决,第1张

imtools.py里面也要有numpy 的引用才对

def histeq(im,nbr_bins=256):

"""对一幅灰度图像进行直方图均衡化"""

#计算图像的直方图

imhist,bins = histogram(im.flatten(),nbr_bins,normed=True)

cdf = imhist.cumsum() #累计分布函数

cdf = 255 * cdf / cdf[-1] #归一化

#使用累计分布函数的线性插值,计算新的像素

im2 = interp(im.flatten(),bins[:-1],cdf)

return im2.reshape(im.shape),cdf

以上代码我定义在imtools.py文件里并且放在了python2.7里

然后我在num.py里引用他

Python code?

1

2

3

4

5

6

7

8

9

10

from PIL import Image

from pylab import *

from numpy import *

import imtools

im= array(Image.open('E:\\daima\\pydaima\\shijue\\tupian1\\gang2.jpg').convert('L'))

im2,cdf =imtools.histeq(im)

出现以下错误:

Traceback (most recent call last):

File "<pyshell#56>", line 1, in <module>

a=imtools.histeq(im)

File "E:\daima\pydaima\shijue\imtools.py", line 32, in histeq

NameError: global name 'histogram' is not defined

下面的程序绘制随机变量X的累积分布函数和数组p的累加结果

>>>pl.plot(t, X.cdf(t))

>>>pl.plot(t2, np.add.accumulate(p)*(t2[1]-t2[0]))

kde(kernel density estimation)是核密度估计。核的作用是根据离散采样,估计连续密度分布。

如果原始采样是《阴阳师》里的式神,那么kernel(核函数)就相当于御魂。

假设现在有一系列离散变量X = [4, 5, 5, 6, 12, 14, 15, 15, 16, 17],可见5和15的概率密度应该要高一些,但具体有多高呢?有没有三四层楼那么高,有没有华莱士高?如果要估计的是没有出现过的3呢?这就要自己判断了。

核函数就是给空间的每个离散点都套上一个连续分布。最简单的核函数是Parzen窗,类似一个方波:

这时候单个离散点就可以变成区间,空间或者高维空间下的超立方,实质上是进行了升维。

设h=4,则3的概率密度为:

(只有4对应的核函数为1,其他皆为0)

kernel是非负实值对称可积函数,表示为K,且一本满足:

这样才能保证cdf仍为1。

实际上应用最多的是高斯核函数(Gaussian Kernel),也就是标准正态分布。所谓核密度估计就是把所有离散点的核函数加起来,得到整体的概率密度分布。核密度估计在很多机器学习算法中都有应用,比如K近邻、K平均等。

在支持向量机里,也有“核”的概念,同样也是给数据升维,最常用的还是高斯核函数,也叫径向基函数(Radial Basis Funtion)。

seaborn.kdeplot内置了多种kerne,总有一款适合你。