数字图像处理本质是对多维矩阵的操作。按照处理对象不同,可分为黑白图像处理,灰度图像处理,彩色图像处理。按照处理方法分为空间域处理和频域处理。按照策略分为全局处理和局部处理。
#一般步骤
输入图像 多维数组 数组运算 图像格式
>图像数字化 ->图像表示 -> 图像处理 -> 图像存储
基本属性操作
亮度操作
对比度操作
颜色通道操作
基本属性操作
亮度操作
亮度也称灰度·,是颜色明暗变化的范围,常用0%-100%表示。一般数字图像像素亮度位0-255,可以通过对像素构成的矩阵灰度值进行操作,达到调整调整图像亮度的目的。
对比度操作
对比度指图像亮暗落差值(图像最大灰度值和最小灰度值之间的差值)。设原像素灰度位f(i,j)
转化后像素灰度位g(i,j),常用线性变化:g(i,j)=a*f(i,j)+b,系数a影响图像对比度,系数b影响图像亮度。
a=1原图
a>1对比度增强,图像更清晰;
a<1对比度减弱,图像变暗
b影响图像亮度,随着增加b(b>0)或减小b,图像整体灰度值上移或下移,不会改变图像对比度。
from skimage import io
from matplotlib import pyplot as plt
import numpy as np # 导入所需类包
# 改变对比度函数
def change_ratio(im, a):
im_change = np.zeros(shape=im.shape, dtype='uint8')
for i in range(im.shape[0]):
for j in range(im.shape[1]):
for k in range(im.shape[2]):
if im[i, j, k] * a > 255:
im_change[i, j, k] = 255;
elif im[i, j, k] * a < 0:
im_change[i, j, k] = 0;
else:
im_change[i, j, k] = im[i, j, k] * a
return im_change
im = io.imread("Jo.jpg")
plt.imshow(im)
plt.show()
im_change = change_ratio(im, 0.68)
plt.imshow(im_change)
plt.show()
原图:
改变对比度后:
整体变暗。
颜色通道操作
数字图像本质是一个多维矩阵,彩色图像是一个三位矩阵,灰度和黑白图像由二维矩阵表示。彩色图像一般分为红,绿,蓝3个颜色通道,每个颜色通道对应一个完整的二维矩阵。可以对这三个二维矩阵操作,达到操作图像通道的目的。
对图像三个颜色通道进行分离:
from skimage import io
from matplotlib import pyplot as plt
# 导入所需类包
img = io.imread("Jo.jpg")
# 分别取出红,绿,蓝三个颜色通道
img_r = img[:, :, 0]
img_g = img[:, :, 1]
img_b = img[:, :, 2]
plt.imshow(img)
plt.show()
# 分别展示三个通道
plt.subplot(2, 2, 1)
io.imshow(img_r)
plt.subplot(2, 2, 2)
io.imshow(img_g)
plt.subplot(2, 2, 3)
io.imshow(img_b)
plt.show()
原图:
取出颜色通道后的图像:
我们现在拥有三个颜色通道,尝试互换三个颜色通道:
from skimage import io
from matplotlib import pyplot as plt
# 导入所需类包
img = io.imread("Jo.jpg")
# 分别取出红,绿,蓝三个颜色通道
img_r = img[:, :, 0]
img_g = img[:, :, 1]
img_b = img[:, :, 2]
#红色蓝色互换
tmp=img_r
img_r=img_b
img_b=tmp
#互换后通道颜色赋值给图像
img[:,:,0]=img_r
img[:,:,2]=img_b
#显示图像
plt.imshow(img)
plt.show()
颜色通道互换后: