diff --git a/实验五/test1.png b/实验五/test1.png new file mode 100644 index 0000000..8455743 Binary files /dev/null and b/实验五/test1.png differ diff --git a/实验五/test1.py b/实验五/test1.py new file mode 100644 index 0000000..ef3993f --- /dev/null +++ b/实验五/test1.py @@ -0,0 +1,25 @@ +# 阈值分割; +# 1、确定分割的目标:首先需要明确要分割的目标是什么,例如分割目标物体和背景。 +# 2、确定阈值:根据图像的特点和需求,选择适当的阈值。阈值可以是一个固定的值,也可以根据图像的统计特性进行自适应选择。 +# 3、将图像转换为灰度图像:如果图像不是灰度图像,需要将其转换为灰度图像。这可以通过将彩色图像的RGB通道进行加权平均得到灰度值。 +# 4、应用阈值:将选择的阈值应用于灰度图像,将图像中的像素分成两个类别:低于阈值的像素和高于阈值的像素。 +# 5、生成二值图像:根据阈值的应用结果,将低于阈值的像素设置为一个固定的值(例如0),将高于阈值的像素设置为另一个固定的值(例如255),从而生成二值图像。 +# 6、后处理(可选):根据实际需求,可以对生成的二值图像进行后处理操作,例如去除噪声、填充空洞等。 + +import numpy as np; +import cv2 as cv; + +img=cv.imread('test1.png',cv.IMREAD_GRAYSCALE) +cv.imshow('img',img) + +threshold_value = 200 +max_value = 255 +_,binary_img = cv.threshold(img,threshold_value,max_value,cv.THRESH_BINARY) +cv.imshow('binary_img',binary_img) + +kernel = np.ones((3,3),np.uint8) +cleaned_img=cv.morphologyEx(binary_img,cv.MORPH_OPEN,kernel) +cv.imshow('cleaned_img',cleaned_img) + +cv.waitKey(0) +cv.destroyAllWindows() \ No newline at end of file diff --git a/实验五/test2.py b/实验五/test2.py new file mode 100644 index 0000000..e8c91ab --- /dev/null +++ b/实验五/test2.py @@ -0,0 +1,9 @@ +# 分水岭算法分割图像 +# 1、图像预处理:对原始图像进行预处理,例如将彩色图像转换为灰度图像,平滑图像以去除噪声,增强图像对比度等。 +# 2、计算图像的梯度:通过对图像应用梯度算子(如Sobel算子)来计算图像的梯度,梯度的变化反映了图像中的边缘信息。 +# 3、确定种子点:根据预处理后的图像或者用户定义的标记信息,确定一些种子点。这些种子点可以代表分割的目标物体或者背景。 +# 4、计算距离变换:使用距离变换算法,从种子点开始,计算每个像素点到最近种子点的距离。这样可以得到一个距离图像,表示每个像素点离最近种子点的距离。 +# 5、计算梯度和距离变换的合并图像:将梯度图像和距离变换图像进行合并,得到一个新的图像。在合并图像中,水流将被认为是从梯度较高的区域向梯度较低的区域流去。 +# 6、计算分水岭:根据合并图像,应用分水岭变换算法来计算分水岭,即将图像分割成不同的分水岭区域。 +# 7、降噪和后处理:对分割结果进行降噪和后处理,例如去除小的分割区域、填充空洞等,以获得最终的分割结果。 +