实验二第一题
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 382 KiB |
@@ -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()
|
||||
@@ -0,0 +1,9 @@
|
||||
# 分水岭算法分割图像
|
||||
# 1、图像预处理:对原始图像进行预处理,例如将彩色图像转换为灰度图像,平滑图像以去除噪声,增强图像对比度等。
|
||||
# 2、计算图像的梯度:通过对图像应用梯度算子(如Sobel算子)来计算图像的梯度,梯度的变化反映了图像中的边缘信息。
|
||||
# 3、确定种子点:根据预处理后的图像或者用户定义的标记信息,确定一些种子点。这些种子点可以代表分割的目标物体或者背景。
|
||||
# 4、计算距离变换:使用距离变换算法,从种子点开始,计算每个像素点到最近种子点的距离。这样可以得到一个距离图像,表示每个像素点离最近种子点的距离。
|
||||
# 5、计算梯度和距离变换的合并图像:将梯度图像和距离变换图像进行合并,得到一个新的图像。在合并图像中,水流将被认为是从梯度较高的区域向梯度较低的区域流去。
|
||||
# 6、计算分水岭:根据合并图像,应用分水岭变换算法来计算分水岭,即将图像分割成不同的分水岭区域。
|
||||
# 7、降噪和后处理:对分割结果进行降噪和后处理,例如去除小的分割区域、填充空洞等,以获得最终的分割结果。
|
||||
|
||||
Reference in New Issue
Block a user