|
发表于 2023-8-4 16:22:13
|
显示全部楼层
本帖最后由 学习编程中的Ben 于 2023-8-4 16:29 编辑
根据您提供的代码,有几个问题可能导致最终绘制的沙脊线不正确:
1. 彩色图像转换为灰度图像时,使用了color.rgb2gray()函数,但是在导入语句中没有引入color模块。请将导入语句修改为from skimage import filters, img_as_ubyte, color。
2. 在边缘检测时,使用了filters.sobel()函数对灰度图像进行处理。这一步骤应该是正确的。
3. 在Hough变换的相关函数调用中,使用了zip(*hough_line_peaks(h, theta, d))。请将这部分修改为zip(h, theta, d)。
4. 在绘制沙脊线时,计算直线的起点和终点坐标的公式可能存在问题。您可以尝试使用以下公式计算:
- y0 = (dist - 0 * np.cos(theta)) / np.sin(theta)
- y1 = (dist - gray_image.shape[1] * np.cos(theta)) / np.sin(theta)
复制代码
请注意,我对代码进行了上述修改。以下是修改后的代码:
- from tifffile import imread
- from skimage import filters, img_as_ubyte, color
- import matplotlib.pyplot as plt
- import numpy as np
- from skimage.transform import hough_line, hough_line_peaks
- # 使用tifffile库读取TIFF格式的RGB影像
- image = imread('F:\\duneline\\dune\\dune.tif')
- # 将影像转换为灰度图像
- gray_image = color.rgb2gray(image)
- # 将灰度图像转换为8位无符号整数格式,因为后续的图像处理函数需要这种格式
- edges = filters.sobel(img_as_ubyte(gray_image))
- # 使用Hough变换找出可能的直线
- tested_angles = np.linspace(-np.pi / 2, np.pi / 2, 360)
- h, theta, d = hough_line(edges, theta=tested_angles)
- # 在原图上画出沙丘脊线
- fig, ax = plt.subplots()
- ax.imshow(image, cmap=plt.cm.gray)
- for _, angle, dist in zip(h, theta, d):
- y0 = (dist - 0 * np.cos(angle)) / np.sin(angle)
- y1 = (dist - gray_image.shape[1] * np.cos(angle)) / np.sin(angle)
- ax.plot((0, gray_image.shape[1]), (y0, y1), '-r')
- plt.show()
复制代码
希望以上修改能够解决您的问题!如果您有任何其他疑问,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!  
|
|