Justheartyoung 发表于 2023-8-4 16:37:07

请各位大佬帮弟弟我写个代码 谢谢

想用python实现以下功能:使用RGB的TIFF格式的无人机影像数据,提取得到其中的沙丘脊线,将提取得到的沙脊线叠加在原来影像图上,最后将结果导出。

isdkz 发表于 2023-8-4 16:37:27

你可以使用Python中的OpenCV库来实现这个功能。下面是一个基本的代码示例:

import cv2
import numpy as np

# 读取RGB的TIFF格式影像
image = cv2.imread('input.tif', cv2.IMREAD_COLOR)

# 将影像转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用Canny边缘检测算法提取边缘
edges = cv2.Canny(gray, 30, 100)

# 使用霍夫变换检测直线
lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=50, minLineLength=50, maxLineGap=10)

# 在原始影像上绘制直线
for line in lines:
    x1, y1, x2, y2 = line
    cv2.line(image, (x1, y1), (x2, y2), (0, 255, 0), 2)

# 导出结果
cv2.imwrite('output.tif', image)


在这个示例中,我们首先读取RGB的TIFF格式影像,并将其转换为灰度图像。然后使用Canny边缘检测算法提取影像的边缘。接着使用霍夫变换检测直线,并在原始影像上绘制检测到的直线。最后将结果导出为TIFF格式影像。

请注意,这只是一个基本的示例代码,你可能需要根据具体情况进行调整和优化。

学习编程中的Ben 发表于 2023-8-4 16:37:34

任务描述:
您想使用Python实现以下功能:
1. 读取RGB的TIFF格式无人机影像数据。
2. 提取沙丘脊线。
3. 将提取得到的沙脊线叠加在原始影像上。
4. 导出结果。

解决方案:
以下是一个示例代码,展示了如何实现您描述的功能:

from tifffile import imread, imwrite
from skimage import filters, feature, color
import matplotlib.pyplot as plt
import numpy as np

# 读取TIFF格式无人机影像数据
image = imread('your_image.tif')

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

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

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

# 叠加沙脊线在原始影像上
overlay = np.copy(image)
overlay = # 将沙脊线部分标记为红色

# 显示原始影像和叠加效果
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax.imshow(image)
ax.set_title('Original Image')
ax.axis('off')
ax.imshow(overlay)
ax.set_title('Overlay')
ax.axis('off')
plt.show()

# 导出结果
imwrite('overlay_image.tif', overlay)


请确保将 your_image.tif 替换为您实际的图像路径。代码中使用了tifffile库来读取和保存TIFF格式的图像,使用skimage库进行图像处理,使用matplotlib库进行可视化。

以上代码提供了一种基本的方法来实现您的要求,但具体效果可能因图像特征和参数设置而异。您可以根据实际需求调整阈值和颜色标记等参数以获得更好的结果。

希望以上内容对您有帮助!如有任何其他疑问,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

tyh小号 发表于 2023-8-4 16:37:36

当然可以帮您实现这个功能。您可以使用以下代码来提取沙丘脊线并将其叠加在原始影像上,并导出结果。

from PIL import Image
import numpy as np
from skimage import filters, color, transform, img_as_ubyte
import matplotlib.pyplot as plt

# 读取TIFF格式的无人机影像数据
image_path = 'path_to_your_image.tif'
image = np.array(Image.open(image_path))

# 提取沙丘脊线
gray_image = color.rgb2gray(image)
edges = filters.sobel(gray_image)
hough, angles, dists = transform.hough_line(edges)

# 将沙丘脊线叠加在原始影像上
line_image = np.zeros_like(image)
for _, angle, dist in zip(*transform.hough_line_peaks(hough, angles, dists)):
    y0 = (dist - 0 * np.cos(angle)) / np.sin(angle)
    y1 = (dist - line_image.shape * np.cos(angle)) / np.sin(angle)
    line_image = # 设置沙丘脊线的颜色为红色

# 叠加原始影像和沙丘脊线
result = np.clip(image + line_image, 0, 255).astype(np.uint8)

# 显示和保存结果
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
axs.imshow(image)
axs.set_title('原始影像')
axs.axis('off')
axs.imshow(result)
axs.set_title('叠加沙丘脊线的影像')
axs.axis('off')
plt.tight_layout()
plt.show()

result_image = Image.fromarray(result)
result_image.save('result.tif')# 导出结果为TIFF格式的图像


请将 'path_to_your_image.tif' 替换为您实际的TIFF影像文件路径,并将代码保存到一个Python文件中运行即可。执行代码后,将会显示原始影像和叠加了沙丘脊线的影像,并将结果导出为 result.tif 文件。

希望对您有所帮助!如有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

学习编程中的Ben 发表于 2023-8-4 16:40:40

想要你上一个帖子的最佳{:10_254:}

Justheartyoung 发表于 2023-8-4 16:40:46

学习编程中的Ben 发表于 2023-8-4 16:37
任务描述:
您想使用Python实现以下功能:
1. 读取RGB的TIFF格式无人机影像数据。

大佬 怎么将提取得到的沙脊线导出为矢量图层呢

学习编程中的Ben 发表于 2023-8-4 16:42:13

Justheartyoung 发表于 2023-8-4 16:40
大佬 怎么将提取得到的沙脊线导出为矢量图层呢

要将提取得到的沙脊线导出为矢量图层,你可以按照以下步骤进行操作:

1. 使用合适的图像处理软件(如Adobe Photoshop、GIMP等)打开包含沙脊线的图像。

2. 在图像处理软件中,选择合适的工具(如钢笔工具、路径工具等)用于描绘沙脊线。根据图像的特点,你可以手动绘制或利用自动选择工具来轮廓沙脊线。

3. 确保所有沙脊线的轮廓都是封闭的路径,没有断点或交叉。

4. 一旦完成路径的描绘,保存图像文件,例如保存为PSD或PNG格式。

5. 将保存的图像文件导入到矢量图形软件中,如Adobe Illustrator等。

6. 在矢量图形软件中,根据需要进一步编辑和调整路径。你可以修改路径的颜色、线型、粗细等属性。

7. 最后,导出矢量图层为常见的矢量图形格式,如SVG、EPS等。

通过以上步骤,你就可以将提取得到的沙脊线导出为矢量图层。这样的矢量图层可以方便地进行后续编辑、缩放以及在不同应用中使用。记住,在导出图层时,选择适合你需求的矢量图形格式以保留最佳质量。

学习编程中的Ben 发表于 2023-8-4 16:45:40

我的答案可以麽(把这个帖子和上个帖子的最佳都给我呗)

Justheartyoung 发表于 2023-8-4 16:47:41

学习编程中的Ben 发表于 2023-8-4 16:45
我的答案可以麽(把这个帖子和上个帖子的最佳都给我呗)

上个帖子确实没解决 谢谢你

学习编程中的Ben 发表于 2023-8-4 16:48:53

好吧
页: [1]
查看完整版本: 请各位大佬帮弟弟我写个代码 谢谢