图像处理

您所在的位置:网站首页 图像膨胀腐蚀算法 图像处理

图像处理

2023-07-10 01:02| 来源: 网络整理| 查看: 265

问题1:请将图像中的小星系去除,只保留最大的星云。

图像腐蚀是数字图像处理中的一种基本操作,其原理是将图像中的物体边缘腐蚀掉,使得物体变小或消失,同时保留背景信息,以便更好地分离和提取图像中的物体。

图像腐蚀的具体实现是利用一个叫结构元素的模板,将其与图像中的像素进行比较,如果模板中的所有像素都与图像中的对应像素匹配,则该像素被保留,否则被腐蚀掉。这种比较过程可以使用逻辑运算来实现,通常采用的是 AND 运算。具体来说,结构元素中的每个像素都与图像中的像素进行 AND 运算,如果所有结果都为1,则保留该像素,否则该像素被腐蚀掉。

图像腐蚀可以应用于很多领域,如图像处理、计算机视觉、图像分析等。它可以用于去除图像中的噪声、分离图像中的前景和背景、提取图像中的边缘等。

import cv2 import numpy as np def erode_image(img, kernel_size): # 获取图像尺寸 img_height, img_width = img.shape # 计算腐蚀核的中心位置 kernel_center_h = kernel_center_w = kernel_size // 2 # 创建一个新的图像 eroded_img = np.zeros((img_height, img_width), dtype=np.uint8) # 对图像进行遍历 for i in range(kernel_center_h, img_height - kernel_center_h): for j in range(kernel_center_w, img_width - kernel_center_w): # 提取与腐蚀核重叠的部分 img_roi = img[i - kernel_center_h:i + kernel_center_h + 1, j - kernel_center_w:j + kernel_center_w + 1] # 进行腐蚀操作,取ROI内的最小值 eroded_img[i, j] = np.min(img_roi) return eroded_img # 读取图像 img = cv2.imread("star.png", cv2.IMREAD_GRAYSCALE) # 对图像进行腐蚀操作 img2 = erode_image(img, 3) # 显示原始图像和腐蚀后的图像 cv2.imshow("Original Image", img) cv2.imshow("Eroded Image", img2) cv2.imwrite('1.png', img2) cv2.waitKey(0) cv2.destroyAllWindows()

 结果图:

 可以看到经过3*3卷积核灰度腐蚀后的图像,小星系基本都被去除了,只保留了最大的星云。

问题2:请对下图分别进行开操作和闭操作,并对处理结果进行分析。

图像开闭运算是数学形态学中常用的图像处理操作,通常用于去除噪声、连接断开的线条、消除细节等。图像开操作通常用于去除小物体和填充物体内部空洞,图像闭操作通常用于填充物体的空洞和连接断开的线条。

图像开操作的原理是将图像与一个结构元素进行腐蚀操作,然后再进行膨胀操作。腐蚀操作会使物体边缘变得更加锐利,从而去除较小的物体和细节。膨胀操作会将结构元素覆盖的区域变为白色,使物体边缘变得更加平滑,从而填补物体内部的空洞。

图像闭操作的原理是将图像与一个结构元素进行膨胀操作,然后再进行腐蚀操作。膨胀操作会使物体的边缘扩张,从而填补物体内部的空洞和连接断开的线条。腐蚀操作会使物体边缘变得更加锐利,从而去除较小的物体和细节。

图像开闭操作的效果受结构元素的形状和大小影响,结构元素的形状和大小应该根据实际需求进行选择。

 

import cv2 import numpy as np def Dilate_or_Erode(img, kernel_size, type): # 获取图像尺寸 img_height, img_width = img.shape # 计算腐蚀核的中心位置 kernel_center_h = kernel_center_w = kernel_size // 2 # 创建一个新的图像 img2 = np.zeros((img_height, img_width), dtype=np.uint8) # 对图像进行遍历 for i in range(kernel_center_h, img_height - kernel_center_h): for j in range(kernel_center_w, img_width - kernel_center_w): # 提取与腐蚀核重叠的部分 img_roi = img[i - kernel_center_h:i + kernel_center_h + 1, j - kernel_center_w:j + kernel_center_w + 1] if type == 'Dilate': # 进行膨胀操作,取ROI内的最大值 img2[i, j] = np.max(img_roi) elif type == 'Erode': # 进行腐蚀操作,取ROI内的最小值 img2[i, j] = np.min(img_roi) else: print("error!") return return img2 # Morphology Closing def Morphology_Closing(img, kernel_size): out = Dilate_or_Erode(img, kernel_size, type='Dilate') out = Dilate_or_Erode(out, kernel_size, type='Erode') return out # Opening morphology def Morphology_Opening(img, kernel_size): out = Dilate_or_Erode(img, kernel_size, type='Erode') out = Dilate_or_Erode(out, kernel_size, type='Dilate') return out # 读取图像 img2 = cv2.imread('blb1.jpg', cv2.IMREAD_GRAYSCALE) # 进行开运算操作 opening = Morphology_Opening(img2, 5) # 进行闭运算操作 closing = Morphology_Closing(img2, 5) # 显示结果 cv2.imshow('Opening', opening) cv2.imshow('Closing', closing) cv2.imwrite('2_Opening.png', opening) cv2.imwrite('2_Closing.png', closing) cv2.waitKey(0) cv2.destroyAllWindows()

结果图:

开操作:

 

闭操作:

可以看到,开操作可以平滑图像物体的边缘,从而使物体的形状更加清晰和准确,物体的边缘变得更加锐利;而图像进行闭运算后,可以填补物体内部的空洞和连接断开的线条,从而使物体的形状更加完整和连续。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3