鱼C论坛

 找回密码
 立即注册
查看: 1478|回复: 4

[已解决]已有代码实现了将提取结果叠在原始影像上导出,现在还想让提取结果单独导出成。

[复制链接]
发表于 2023-8-8 11:32:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请帮忙添加代码,以实现提取结果的单独导出。
代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import matplotlib.pyplot as plt
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')
# 转换为灰度图像
gray_image = color.rgb2gray(image)
# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)
# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.005
binary = edges > threshold

# 使用腐蚀和膨胀操作消除噪音
binary = morphology.binary_erosion(binary, morphology.disk(1))  # 腐蚀操作
binary = morphology.binary_dilation(binary, morphology.disk(1))  # 膨胀操作
# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色
# 导出结果
imwrite('ed1sobel_005.tif', overlay)






最佳答案
2023-8-8 11:32:47
要实现提取结果的单独导出,需要对代码进行修改。以下是修改后的代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')

# 转换为灰度图像
gray_image = color.rgb2gray(image)

# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)

# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.005
binary = edges > threshold

# 使用腐蚀和膨胀操作消除噪音
binary = morphology.binary_erosion(binary, morphology.disk(1))
binary = morphology.binary_dilation(binary, morphology.disk(1))

# 导出结果
imwrite('ed1sobel_005.tif', binary)  # 单独导出二值化结果

在上述代码中,我将原来的overlay变量改为了binary变量,并使用imwrite()函数直接将二值化结果导出为ed1sobel_005.tif文件。

这样修改后的代码将会单独导出提取结果的二值化图像。请确保指定的导出路径是正确的,并存储为适当的图像格式(如.tif)。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-8 11:32:41 | 显示全部楼层
要实现提取结果的单独导出,你可以使用以下代码:
# 导出二值化图像
imwrite('binary_image.tif', binary.astype(np.uint8) * 255)

在这个代码中,我们使用 imwrite 函数将二值化图像保存为TIFF格式。 binary 是一个布尔数组,我们通过将其转换为无符号整数类型,并乘以255来将其转换为灰度图像。然后,我们将其保存为 binary_image.tif 文件。

请注意,为了使用 imwrite 函数,你需要确保已经安装了 tifffile 库。你可以使用以下命令在终端中安装它:
pip install tifffile

希望这可以帮助到你!如果你有任何其他问题,请随时问我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 11:32:47 | 显示全部楼层    本楼为最佳答案   
要实现提取结果的单独导出,需要对代码进行修改。以下是修改后的代码:
from tifffile import imread, imwrite
from skimage import filters, feature, color, morphology
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')

# 转换为灰度图像
gray_image = color.rgb2gray(image)

# 边缘检测,提取沙丘脊线
edges = filters.sobel(gray_image)

# 设置合适的阈值来确定沙脊线的二值化图像
threshold = 0.005
binary = edges > threshold

# 使用腐蚀和膨胀操作消除噪音
binary = morphology.binary_erosion(binary, morphology.disk(1))
binary = morphology.binary_dilation(binary, morphology.disk(1))

# 导出结果
imwrite('ed1sobel_005.tif', binary)  # 单独导出二值化结果

在上述代码中,我将原来的overlay变量改为了binary变量,并使用imwrite()函数直接将二值化结果导出为ed1sobel_005.tif文件。

这样修改后的代码将会单独导出提取结果的二值化图像。请确保指定的导出路径是正确的,并存储为适当的图像格式(如.tif)。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 11:32:50 | 显示全部楼层
【非代码部分】

标题:添加代码以实现提取结果的单独导出

要实现提取结果的单独导出,可以使用imwrite()函数将结果保存为单独的图像文件。在现有代码的基础上,需要添加一些步骤来实现这个功能。

【代码部分】

下面是修改后的代码,完成了提取结果的单独导出:
from tifffile import imread, imwritefrom skimage import filters, feature, color, morphologyimport matplotlib.pyplot as pltimport numpy as np# 读取TIFF格式无人机影像数据image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')# 转换为灰度图像gray_image = color.rgb2gray(image)# 边缘检测,提取沙丘脊线edges = filters.sobel(gray_image)# 设置合适的阈值来确定沙脊线的二值化图像threshold = 0.005binary = edges > threshold# 使用腐蚀和膨胀操作消除噪音binary = morphology.binary_erosion(binary, morphology.disk(1))  # 腐蚀操作binary = morphology.binary_dilation(binary, morphology.disk(1))  # 膨胀操作# 叠加沙脊线在原始影像上overlay = np.copy(image)overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色# 导出结果imwrite('ed1sobel_005.tif', overlay)# 单独导出提取结果result_image = np.zeros_like(image)  # 创建一个与原始影像相同大小的全黑图像result_image[binary] = image[binary]  # 将沙脊线部分的像素值复制到结果图像中imwrite('result_image.tif', result_image)
在上述代码中,我们添加了以下步骤来实现提取结果的单独导出:

1. 创建一个与原始影像相同大小的全黑图像,命名为result_image
2. 使用布尔掩码binary来选择沙脊线部分的像素,将这部分像素从原始影像中复制到result_image中。
3. 使用imwrite()函数将result_image保存为单独的图像文件,命名为result_image.tif

通过以上修改,你可以将提取结果单独导出为result_image.tif文件。请确保文件名和保存路径适合你的需求,并且你的计算机上已安装所需的库(如tifffile)以正确运行代码。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-8 11:32:54 | 显示全部楼层
【非代码部分】

标题:如何实现提取结果的单独导出?

要将提取结果单独导出,你可以使用imwrite()函数将结果保存为一个单独的图像文件。以下是修改后的完整代码:

【代码部分】
from tifffile import imread, imwritefrom skimage import filters, feature, color, morphologyimport matplotlib.pyplot as pltimport numpy as np# 读取TIFF格式无人机影像数据image = imread('C:\\Users\\WINDOWS\\Desktop\\taiyuan\\python\\1=quick_dom.tif')# 转换为灰度图像gray_image = color.rgb2gray(image)# 边缘检测,提取沙丘脊线edges = filters.sobel(gray_image)# 设置合适的阈值来确定沙脊线的二值化图像threshold = 0.005binary = edges > threshold# 使用腐蚀和膨胀操作消除噪音binary = morphology.binary_erosion(binary, morphology.disk(1))  # 腐蚀操作binary = morphology.binary_dilation(binary, morphology.disk(1))  # 膨胀操作# 叠加沙脊线在原始影像上overlay = np.copy(image)overlay[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色# 导出结果imwrite('ed1sobel_005.tif', overlay)# 单独导出提取结果result = np.zeros_like(image)result[binary] = [255, 0, 0]  # 将沙脊线部分标记为红色# 导出单独的结果图像imwrite('extracted_result.tif', result)
在上述代码中,我添加了以下部分来实现提取结果的单独导出:

1. 在叠加沙丘脊线部分的代码后面,我创建了一个名为result的新变量,它是一个与原始影像大小和数据类型相同的全零数组。

2. 使用提取结果binaryresult数组中对应位置的像素设为红色[255, 0, 0],这将仅在提取结果处生成红色标记。

3. 最后,使用imwrite()函数将result保存为名为extracted_result.tif的单独结果图像文件。

通过运行修改后的代码,你将得到两个输出文件:ed1sobel_005.tif包含叠加沙丘脊线的原始影像,而extracted_result.tif则是提取结果的单独导出图像。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表