赞
踩
JPEG
压缩技术串讲全章知识点。人工智能是引领未来发展的战略性技术,是新一轮科技革命和产业变革的重要驱动力量,将深刻地改变人类社会生活。
促进人工智能和实体经济的深度融合,构建数据驱动、人机协同、跨界融合、共创分享的智能经济形态,更是推动质量变革、效率变革、动力变革的重要途经。
进年来,我国人工智能新技术、新产品、新业态持续涌现,与农业、制造业、服务业等行业的融合步伐明显加快,在技术创新、应用推广、产业发展等方面成效初显。
人工智能技术并不是一个新生事物,它在最近几年引起全球性关注并得到飞速发展的主要原因,在于它的三个基本要素(算法、数据、算力)的迅猛发展,其中又以数据和算力的发展尤为重要。
物联网技术的蓬勃发展使得数据累计的难度越来越低,而芯片算力的不断提升,使得过去只能通过云计算才能完成的人工智能运算,现在可以下沉到最普通的设备上完成。
物联网技术为机器带来感知能力,而人工智能则通过计算算力为机器带来了决策能力,正如感知和大脑对自然生命进化所起到的必然性作用。
https://hulin.blog.csdn.net/article/details/107570020
https://hulin.blog.csdn.net/article/details/107578369
低通滤波
和高通滤波
。from skimage import data, color, io from matplotlib import pyplot as plt import numpy as np def corre12d(img, window): m = window.shape[0] n = window.shape[1] # 边界通过0灰度值填充扩展 img_border = np.zeros((img.shape[0] + m - 1, img.shape[1] + n - 1)) img_border[(m - 1) // 2:(img.shape[0] + (m - 1) // 2), (n - 1) // 2:(img.shape[1] + (n - 1) // 2)] = img img_result = np.zeros(img.shape) for i in range(img_result.shape[0]): for j in range(img_result.shape[1]): temp = img_border[i:i + m, j:j + n] img_result[i, j] = np.sum(np.multiply(temp, window)) return img_border, img_result # window表示滤波模板,img表示原始矩阵 window = np.array([[1, 0, 0], [0, 0, 0], [0, 0, 2]]) img = np.array([[1, 2, 1, 0, 2, 3], [0, 1, 1, 2, 0, 1], [3, 0, 2, 1, 2, 2], [0, 1, 1, 0, 0, 1], [1, 1, 3, 2, 2, 0], [0, 0, 1, 0, 1, 0]]) # img_border表示边界填充后的矩阵,img_result表示空间滤波结果 img_border, img_result = corre12d(img, window)
m*n
的线性滤波器模板有m*n
个模板系数,这些系数决定了线性空间滤波器的功能。假设要实现3x3的平滑空间滤波器,较简单的方法是使得滤波器的系数均为1/9。import numpy as np from scipy import signal from skimage import data, io from matplotlib import pyplot as plt # 定义二维灰度图像的空间滤波函数 def correl2d(img, window): """ 使用滤波器实现图像的空间相关 mode='same' 表示输出尺寸等于输入尺寸 boundary=‘fill’ 表示滤波前,用常量值填充原始图像的边缘,默认常量值为0 :param img: :param window: :return: """ s = signal.correlate2d(img, window, mode='same', boundary='fill') return s.astype(np.uint8) img = data.camera() # 3*3 盒状滤波模板 window1 = np.ones((3, 3)) / (3 ** 2) # 5*5 盒状滤波模板 window2 = np.ones((5, 5)) / (5 ** 2) # 9*9 盒状滤波模板 window3 = np.ones((9, 9)) / (9 ** 2) # 生成滤波结果 img1 = correl2d(img, window1) img2 = correl2d(img, window2) img3 = correl2d(img, window3) plt.figure() plt.imshow(img) plt.figure() plt.imshow(img1) plt.figure() plt.imshow(img2) plt.figure() plt.imshow(img3) plt.show()
盒状滤波结果比原始图像的湖面水波更加平滑,并且远处风景更加模糊,同时摄影师也被模糊了
高斯平滑滤波是一种应用较广泛的平滑空间滤波方法之一
import numpy as np from scipy import signal from skimage import data, io from matplotlib import pyplot as plt import math # 定义二维灰度图像的空间滤波函数 def correl2d(img, window): """ 使用滤波器实现图像的空间相关 mode='same' 表示输出尺寸等于输入尺寸 boundary=‘fill’ 表示滤波前,用常量值填充原始图像的边缘,默认常量值为0 :param img: :param window: :return: """ s = signal.correlate2d(img, window, mode='same', boundary='fill') return s.astype(np.uint8) # 定义二维高斯函数 def gauss(i, j, sigma): return 1 / (2 * math.pi * sigma ** 2) * math.exp(-(i ** 2 + j ** 2) / (2 * sigma ** 2)) # 定义radius*radius的高斯平滑模板 def gauss_window(radius, sigma): window = np.zeros((radius * 2 + 1, radius * 2 + 1)) for i in range(-radius, radius + 1): for j in range(-radius, radius + 1): window[i + radius][j + radius] = gauss(i, j, sigma) return window / np.sum(window) img = data.camera() # 3*3 高斯平滑滤波模板 window1 = gauss_window(3, 1.0) # 5*5 高斯平滑滤波模板 window2 = gauss_window(5, 1.0) # 9*9 高斯平滑滤波模板 window3 = gauss_window(9, 1.0) # 生成滤波结果 img1 = correl2d(img, window1) img2 = correl2d(img, window2) img3 = correl2d(img, window3) plt.figure() plt.imshow(img, cmap='gray') plt.figure() plt.imshow(img1, cmap='gray') plt.figure() plt.imshow(img2, cmap='gray') plt.figure() plt.imshow(img3, cmap='gray') plt.show()
from scipy import ndimage from skimage import util, data from matplotlib import pyplot as plt img = data.astronaut()[:, :, 0] # 对图像加入脉冲噪声 noise_img = util.random_noise(img, mode='s&p', seed=None, clip=True) # 中值滤波 n = 3 new_img = ndimage.median_filter(noise_img, (n, n)) plt.figure() plt.axis('off') plt.imshow(img, cmap='gray') # 显示原始图像 plt.figure() plt.axis('off') plt.imshow(noise_img, cmap='gray') # 显示加噪图像 plt.figure() plt.axis('off') plt.imshow(new_img, cmap='gray') # 显示去噪图像 plt.show()
from scipy import ndimage from skimage import util, data from matplotlib import pyplot as plt import numpy as np img = data.astronaut() noise_img = np.zeros(img.shape) new_img = np.zeros(img.shape) for i in range(3): gray_img = img[:, :, i] # 对图像加入脉冲噪声 noise_img[:, :, i] = util.random_noise(gray_img, mode='s&p', seed=None, clip=True) # 中值滤波 n = 3 new_img[:, :, i] = ndimage.median_filter(noise_img[:, :, i], (n, n)) plt.figure() plt.axis('off') plt.imshow(img, cmap='gray') # 显示原始图像 plt.figure() plt.axis('off') plt.imshow(noise_img, cmap='gray') # 显示加噪图像 plt.figure() plt.axis('off') plt.imshow(new_img, cmap='gray') # 显示去噪图像 plt.show()
原始图像
加噪图像
去噪图像
最大值滤波对于发现图像最亮点非常有效,可有效降低胡椒噪声
最小值滤波对于发现图像最暗点非常有效,可有效降低盐粒噪声
from scipy import ndimage from skimage import util, data from matplotlib import pyplot as plt import numpy as np img = data.astronaut()[:, :, 0] # 对图像加入胡椒噪声 pepper_img = util.random_noise(img, mode='pepper', seed=None, clip=True) # 对图像加入盐粒噪声 salt_img = util.random_noise(img, mode='salt', seed=None, clip=True) n = 3 # 最大值滤波 max_img = ndimage.maximum_filter(pepper_img, (n, n)) # 最小值滤波 min_img = ndimage.minimum_filter(salt_img, (n, n)) plt.figure() plt.axis('off') plt.imshow(img, cmap='gray') # 显示原始图像 plt.figure() plt.axis('off') plt.imshow(pepper_img, cmap='gray') # 显示加胡椒噪声图像 plt.figure() plt.axis('off') plt.imshow(salt_img, cmap='gray') # 显示加盐粒噪声图像 plt.figure() plt.axis('off') plt.imshow(max_img, cmap='gray') # 显示最大值滤波图像 plt.figure() plt.axis('off') plt.imshow(min_img, cmap='gray') # 显示最小值滤波图像 plt.show()
显示加胡椒噪声图像
显示加盐粒噪声图像
显示最大值滤波图像
显示最小值滤波图像
from skimage import data, filters from matplotlib import pyplot as plt img = data.camera() # 罗伯特交叉梯度算子 img_robert_pos = filters.roberts_pos_diag(img) img_robert_neg = filters.roberts_neg_diag(img) img_robert = filters.roberts(img) # 显示原始图像 plt.figure() plt.imshow(img, cmap='gray') plt.show() # 显示罗伯特正对角线边缘图像 plt.figure() plt.imshow(img, cmap='gray') plt.show() # 显示罗伯特负对角线边缘图像 plt.figure() plt.imshow(img, cmap='gray') plt.show() # 显示罗伯特梯度图像 plt.figure() plt.imshow(img, cmap='gray') plt.show()
原始图像
罗伯特正对角线边缘图像
罗伯特负对角线边缘图像
罗伯特梯度图像
求索贝尔边缘图像和梯度图像的代码如下。
from skimage import data, filters from matplotlib import pyplot as plt img = data.camera() # Sobel算子 img_sobel_h = filters.sobel_h(img) img_sobel_v = filters.sobel_v(img) img_sobel = filters.sobel(img) # 显示原始图像 plt.figure() plt.imshow(img, cmap='gray') plt.show() # 显示水平Sobel边缘图像 plt.figure() plt.imshow(img_sobel_h, cmap='gray') plt.show() # 显示竖直Sobel边缘图像 plt.figure() plt.imshow(img_sobel_v, cmap='gray') plt.show() # 显示Sobel梯度图像 plt.figure() plt.imshow(img_sobel, cmap='gray') plt.show()
水平Sobel边缘图像
竖直Sobel边缘图像
Sobel梯度图像
from skimage import data, filters from matplotlib import pyplot as plt img = data.camera() # laplace img_laplace = filters.laplace(img, ksize=3, mask=None) img_enhance = img + img_laplace # 显示原始图像 plt.figure() plt.imshow(img, cmap='gray') plt.show() # 显示拉普拉斯图像 plt.figure() plt.imshow(img_laplace, cmap='gray') plt.show() # 显示锐化增强图像 plt.figure() plt.imshow(img_enhance, cmap='gray') plt.show()
原始图像
拉普拉斯图像
锐化增强图像
一阶微分更加突出图像的边缘,二阶微分对灰度变化强烈的地方更敏感,更加突出图像的纹理结构。
from skimage import data, filters from matplotlib import pyplot as plt from scipy import signal import numpy as np def correlate2d(img, window): s = signal.correlate2d(img, window, mode='same', boundary='fill') return s img = data.camera() # 3*3 盒状滤波模板 window = np.ones((3, 3)) / (3 ** 2) img_blur = correlate2d(img, window) img_edge = img - img_blur img_enhance = img + img_edge # 显示原始图像 plt.figure() plt.imshow(img, cmap='gray') plt.show() # 显示模糊图像 plt.figure() plt.imshow(img_blur, cmap='gray') plt.show() # 显示差值图像 plt.figure() plt.imshow(img_edge, cmap='gray') plt.show() # 显示锐化增强图像 plt.figure() plt.imshow(img_enhance, cmap='gray') plt.show()
模糊图像
差值图像
锐化增强图像
from skimage import data, filters, io from matplotlib import pyplot as plt import numpy as np # 图像空间滤波函数 def correlate2d(img, window): m = window.shape[0] n = window.shape[1] # 边界通过0灰度值填充扩展 img1 = np.zeros((img.shape[0] + m - 1, img.shape[1] + n - 1)) img1[(m - 1) // 2:(img.shape[0] + (m - 1) // 2), (n - 1) // 2:(img.shape[1] + (n - 1) // 2)] = img img2 = np.zeros(img.shape) for i in range(img2.shape[0]): for j in range(img2.shape[1]): temp = img1[i:i + m, j:j + n] img2[i, j] = np.sum(np.multiply(temp, window)) return img2 img = io.imread('boneScan.jpg', as_gray=True) # img_laplace为原始图像经过拉普拉斯变换后的结果 window = np.array([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]) img_laplace = correlate2d(img, window) img_laplace = 255 * (img_laplace - img_laplace.min()) / (img_laplace.max() - img_laplace.min()) # 将img与img_laplace相加得到锐化增强图像 img_laplace_enhance = img + img_laplace # img_sobel为原始图像img经sobel处理的结果 img_sobel = filters.sobel(img) # 使用5*5均值滤波器平滑后的Sobel图像 window_mean = np.ones((5, 5)) / (5 ** 2) img_sobel_mean = correlate2d(img_sobel, window_mean) # 将img_laplace_enhance 与 img_sobel_mean相乘得到锐化结果 img_mask = img_laplace_enhance * img_sobel_mean # 将原图像img与锐化图像img_mask相加得到锐化增强图像 img_sharp_enhance = img + img_mask # 对img_sharp_enhance进行灰度幂律变换得到最终结果 img_enhance = img_sharp_enhance ** 0.5 # 显示图像 imgList = [img, img_laplace, img_laplace_enhance, img_sobel, img_sobel_mean, img_mask, img_sharp_enhance, img_enhance] for grayImg in imgList: plt.figure() plt.axis('off') plt.imshow(grayImg, cmap='gray') plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。