来源:投稿 作者:小灰灰
编辑:学姐
前言
在光照的情况下,通过成像系统将大自然中的物体拍摄出来,成像系统手机自带有,这里面我们关心的是分辨率,成像系统显示的点数越多,阵列越大,越能真实的反映出当时物体的形象颜色。
图形与图像的区别
存储格式不一样,图形是由指令来构成的,命令在计算机里是语句,记录的是坐标,颜色。图像没有命令,是一个大数据,里面是像素值,直观,信息量大
图像的表示由颜色值这样一个矩阵表示,而颜色值对应于颜色表里面的索引值。点的处理有领域法,平域法,空域法。
复原,增强,分割
图像的文件格式
黑白图像
0 1
索引图像
有索引表,索引表矩阵,数据内容不一样,造成有灰度图像(RGB三个分量值相等,索引号等于颜色的灰度值),伪彩色图像(分度值不相等,只能表示256中的一色),真彩色数据区是三个矩阵。
有调色板了,意味着我们要用我们带的调色板去显示这张图。有颜色表,八位,调到计算机内存,创建调色板,把调色板放到设备环境里面。没有,真彩色,直接用RGB显示图像。
位图图像
位图文件来说最常用的几种格式👇。
BMP位图可以直接进行绘画操作;
GIF(Graphics Interchange format图像转换格式,用来传输,在文件里面进行插入,容量小,颜色数有限)位图;
TIFF(Tag image file format标签图像文件格式)位图;
JPEG(Join photographics experts group联合图像专家组)位图。
BMP文件
BITmapfileheader(位图文件头结构),bitmapinfoheader(位图信息头结构),位图颜色表rgbquad,位图像素数据。
图像滤波与增强
图像滤波:让信号波一部分可以通过,一部分不通过,根据图像的高低频,设置高通和低通滤波器,高通滤波器可以检测变化尖锐的地方,低通滤波器可以让图像变得平滑,消除噪声,高通可以用于边缘检测,低通可以用于图像的平滑去燥。
- 线性滤波:方框滤波,均值滤波,高斯滤波
- 非线性滤波:中值滤波,双边滤波
- 领域算子:利用周边的信息进行计算,
- 线性滤波:输入像素的加权和,类似于卷积
2.1 方框滤波:boxFilter
使他更模糊
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("2.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.subplot(131),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
arry=np.array(img).tolist()
r=cv2.boxFilter(img,-1,(3,3),normalize=1)
d=cv2.boxFilter(img,-1,(3,3),normalize=0)
plt.subplot(132),plt.imshow(r),plt.title('equa')
plt.xticks([]),plt.yticks([])
plt.subplot(133),plt.imshow(d),plt.title('equa')
plt.xticks([]),plt.yticks([])
plt.show()
2.2 均值滤波:blur()
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("2.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
plt.subplot(122),plt.imshow(result),plt.title('equa')
plt.xticks([]),plt.yticks([])
plt.show()
2.3 高斯滤波()
能有效的消除高斯噪声,保留更多的图像细节
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('2.jpg')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur=cv2.GaussianBlur(img,(7,7),7)
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img),plt.title('blurres')
plt.xticks([]),plt.yticks([])
plt.show()
2.4 非线性中值滤波
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('3.jpg')
median = cv.medianBlur(img,7)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(median),plt.title('median')
plt.xticks([]), plt.yticks([])
plt.show()
2.5 非线性双边滤波
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('bilateral.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blur = cv2.bilateralFilter(img,-1,15,10)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
2.6 数据增强
直方图均衡化:将分布不均匀的图片变成分布均匀的方法.
import cv2
from matplotlib import pyplot as plt
img = cv2.imread("./image/dark1.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(result),plt.title('blurres')
plt.xticks([]),plt.yticks([])
plt.show()
Gamma变换
是对图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数的关系,目的就是用来图像增强 ,提升暗部细节,通过非线性变换,让图像从曝光强度的线性响应变得更加 接近人眼感受的响应
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('2.jpg')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
def adjust_gamma(image, gamma=1.0):
invGamma = 1.0/gamma
table = []
for i in range(256):
table.append(((i / 255.0) ** invGamma) * 255)
table = np.array(table).astype("uint8")
print(table)
return cv2.LUT(image, table)
img_gamma = adjust_gamma(img, 0.8)
#print(img_gamma)
plt.subplot(121),plt.imshow(img),plt.title('original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_gamma),plt.title('blurres')
plt.xticks([]),plt.yticks([])
plt.show()
点击卡片关注👇每日更新AI前沿&论文资料代码数据集