文章目录

  • 计算机视觉第一次博客—使用pycharm进行图像处理
  • 一,什么是图像?
  • 二,图像处理之直方图,直方图均衡化,高斯滤波
  • 2.1.1直方图
  • 2.1.2代码实现结果
  • 2.2.1直方图均衡化
  • 2.2.2代码实现结果
  • 2.3.1高斯滤波
  • 2.3.2代码实现结果
  • 三,实验出现的问题以及解决方法
  • 3.1版本问题
  • 3.2中文字符问题


计算机视觉第一次博客—使用pycharm进行图像处理

一,什么是图像?

图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

pycharm使用imagemagick pycharm处理图像_直方图

二,图像处理之直方图,直方图均衡化,高斯滤波
2.1.1直方图

直方图是数值数据分布的精确图形表示。 这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。

# -- coding: utf-8 --
from PIL import Image
from pylab import *
from matplotlib.font_manager import FontProperties

font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('C:\\Python\\1.pictures\\1.jpg').convert('L'))  # 打开图像,并转成灰度图像

figure()
subplot(121)
gray()
contour(im, origin='image')
axis('equal')
axis('off')
title(u'图像轮廓', fontproperties = font)

subplot(122)
hist(im.flatten(), 128)
title(u'图像直方图', fontproperties = font)
plt.xlim([0, 260])
plt.ylim([0, 11000])

show()
2.1.2代码实现结果

pycharm使用imagemagick pycharm处理图像_直方图_02

2.2.1直方图均衡化

图像灰度变换中一个非常有用的例子就是直方图均衡化。直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。

在这种情况下,直方图均衡化的变换函数是图像中像素值的累积分布函数(cumulative distribution function,简写为 cdf,将像素值的范围映射到目标范围的归一化操作)。

下面的函数是直方图均衡化的具体实现。将这个函数添加到 imtool.py 里:

绘图都可以调用matplotlib.pyplot库来进行,其中的hist函数可以直接绘制直方图。

hist() 函数的第二个参数指定小区间的数目。需要注意的是,因为 hist() 只接受一维数组作为输入,所以我们在绘制图像直方图之前,必须先对图像进行压平处理。flatten() 方法将任意数组按照行优先准则转换成一维数组。

# -- coding: utf-8 --
from PIL import Image
from pylab import *
from PCV.tools import imtools
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('C:\\Python\\1.pictures\\1.jpg').convert('L')) # 打开图像,并转成灰度图像
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始图像', fontproperties=font)
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'直方图均衡化后的图像', fontproperties=font)
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'原始直方图', fontproperties=font)
hist(im.flatten(), 128, normed=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图', fontproperties=font)
#hist(im2.flatten(), 128, cumulative=True, normed=True)
hist(im2.flatten(), 128, normed=True)

show()
subplot(122)
hist(im.flatten(), 128)
title(u'图像直方图', fontproperties = font)
plt.xlim([0, 260])
plt.ylim([0, 11000])

show()
2.2.2代码实现结果

pycharm使用imagemagick pycharm处理图像_直方图_03

2.3.1高斯滤波

高斯滤波在图像处理概念下,将图像频域处理和时域处理相联系,作为低通滤波器使用,可以将低频能量(比如噪声)滤去,起到图像平滑作用。

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:**用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值用。**高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。

# -- coding: utf-8 --
from PIL import Image
from pylab import *
from numpy import *
from numpy import random
from scipy.ndimage import filters
from scipy.misc import imsave
from PCV.tools import rof


from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)

im = array(Image.open('C:\\Python\\1.pictures\\1.jpg').convert('L'))

U,T = rof.denoise(im,im)
G = filters.gaussian_filter(im,10) # save the result
figure()
gray()
subplot(1,3,1)
imshow(im)
axis('off')
title(u'原噪声图像', fontproperties=font)
subplot(1,3,2)
imshow(G)
#axis(‘equal’)
axis('off')
title(u'高斯模糊后的图像', fontproperties=font)

subplot(1,3,3)
imshow(U)
axis('off')
title(u'ROF降噪后的图像', fontproperties=font)

show()
2.3.2代码实现结果

pycharm使用imagemagick pycharm处理图像_直方图_04

三,实验出现的问题以及解决方法
3.1版本问题

pycharm使用imagemagick pycharm处理图像_直方图_05

因为Python2print输出不用括号,而python3需要,所以在PCV库里的imtools中第27行代码加括号

3.2中文字符问题

pycharm使用imagemagick pycharm处理图像_高斯滤波_06


因为Python2print输出不用括号,而python3需要,所以在PCV库里的imtools中第27行代码加括号