我有一个RGB格式的3通道图像,包含许多建筑物作为感兴趣的区域。图像的背景是完全黑色的(零像素)。我试图计算每个ROI的颜色特征,并将其保存在CSV文件中,但我的代码只取单个RGB值作为每个通道的平均值,因为我需要保存R,G,B,CSV文件中每个ROI的RGB和RGB平均值。如有任何指导,将不胜感激。enter image description here
import numpy as np
import pandas as pd
from skimage import io
image = io.imread("/content/drive/MyDrive/277.png")
current_roi = 1
start_pixel = None
roi_mean_values = []
for y in range(image.shape[0]):
for x in range(image.shape[1]):
pixel_value = image[y, x]
if np.any(pixel_value > 0):
if start_pixel is None:
start_pixel = (x, y)
elif start_pixel is not None:
end_pixel = (x - 1, y) # End of the current ROI
roi = image[start_pixel[1]:end_pixel[1] + 1, start_pixel[0]:end_pixel[0] + 1]
mean_rgb = np.mean(roi, axis=(0, 1))
roi_mean_values.append({'ROI': current_roi,
'Mean_R': mean_rgb[0],
'Mean_G': mean_rgb[1],
'Mean_B': mean_rgb[2]})
current_roi += 1
start_pixel = None
roi_mean_df = pd.DataFrame(roi_mean_values)
roi_mean_df.to_csv("roi_mean_values.csv", index=False)
print("RGB mean values for individual buildings (ROIs) saved to 'roi_mean_values.csv'.")
字符串
1条答案
按热度按时间col17t5w1#
据我所知,ROI由输入图像的connected components给出。每个连接的组件都是一个ROI。
你可以在不迭代ROI的情况下解决这个问题,如果有很多ROI的话,这会变得非常昂贵。但是,这段代码确实显式地遍历了像素,这在Python中很慢。也许,迭代ROI并使用编译函数来处理所有像素会产生更快的Python代码,即使实际上要做更多的工作。但是用编译语言编写,这个算法是你能写的最有效的算法。
字符串
让我们看看平均颜色是什么样子的:
型
的数据
当然,由于我们使用skimage,我们也可以使用
skimage.measure.regionprops
,并获得intensity_mean
属性:型