You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在图像中用圆圈标记强度值低于阈值的像素?

在图像上标记低于阈值的像素的正确方法

我明白你的困扰——直接用plt.plot()处理布尔矩阵肯定行不通,因为它根本没对应到图像的坐标系统。其实散点图完全能解决这个问题,关键是要先精准提取出符合条件的像素坐标,再把这些坐标映射到图像上。

下面是修正后的完整方案:

核心思路

  1. np.where()从布尔矩阵中提取出所有低于阈值的像素的行(y轴)和列(x轴)坐标
  2. 利用plt.scatter()把这些坐标对应到imshow绘制的图像上,用圆圈标记出来
  3. 注意imshow的坐标规则:左上角是(0,0),数组的行对应y轴,列对应x轴,所以散点图要把列作为x参数,行作为y参数

完整代码示例

import numpy as np
import matplotlib.pyplot as plt

# 替换成你自己的矩阵数据
row1 = [3, 1, 4, 2]
row2 = [0, 5, 1, 6]
row3 = [2, 0, 3, 1]
row4 = [7, 2, 0, 4]
matrix = np.matrix([row1, row2, row3, row4])

threshold = 1
# 生成低于阈值的布尔掩码
matrix_s = matrix <= threshold

# 提取符合条件的像素坐标:返回格式为(y坐标数组, x坐标数组)
y_coords, x_coords = np.where(matrix_s)

# 绘制原始图像
plt.imshow(matrix, cmap='viridis')
plt.colorbar()

# 标记目标像素:用空心红圈,边缘加白边让标记更醒目
plt.scatter(
    x_coords, 
    y_coords, 
    marker='o', 
    color='red', 
    edgecolor='white', 
    s=80,  # 圆圈大小
    facecolor='none'  # 空心,不遮挡下方图像
)

plt.title('Pixels with value ≤ threshold')
plt.show()

为什么你的原代码无效?

你之前的plt.plot(matrix_s, marker='o')犯了两个关键错误:

  • 直接传入布尔矩阵会被Matplotlib当成一维序列处理,完全没有和图像的二维坐标系统关联
  • plot()默认会把点连接成线,这显然不是你想要的标记效果

而用np.where()提取坐标后,scatter()就能精准定位每个需要标记的像素,和imshow的坐标系统完全匹配。

内容的提问来源于stack exchange,提问作者vashista

火山引擎 最新活动