问题描述
需求: 我想通过不同的颜色,在灰度图上直观显示所有不同误差的点,并有颜色条可以表示误差和颜色的对应关系。
存在的问题: 灰度图也发生了颜色的改变。代码如下:
% 读取 MATLAB 自带的图像 cameraman.tif
img = imread('cameraman.tif');
% 显示灰度图像
imshow(img, []);
hold on; % 保持图像,准备叠加散点
% 示例数据:假设随机生成10个点的坐标和对应的误差
% 你可以根据实际数据替换这些值
num_points = 10; % 假设有10个点
col = randi([1, size(img, 2)], num_points, 1); % 随机生成列坐标 (X 方向)
row = randi([1, size(img, 1)], num_points, 1); % 随机生成行坐标 (Y 方向)
error = rand(num_points, 1) * 10; % 随机生成误差值,范围 [0, 10]
% 绘制散点图,点的颜色根据 error 值变化,使用 'filled' 填充点
scatter(col, row, 100, error, 'filled');
% 设置彩色映射(例如使用 jet colormap)
caxis([0,10]);colormap(jet);
% 添加颜色条,显示颜色与误差值的对应关系
colorbar;
% 设置图像坐标系反转,使得点的坐标与图像一致
set(gca, 'YDir', 'reverse');
% 设置轴标签
xlabel('Column (X)');
ylabel('Row (Y)');
% 设置标题
title('Error Distribution on Cameraman Image');
hold off; % 关闭图像保持
以上代码结果图如下:
解决思路
我的解决方法: 将灰度图矩阵转换为三维矩阵,即可解决上述问题。修改后代码如下:
% 读取 MATLAB 自带的图像 cameraman.tif
img = imread('cameraman.tif');
img = repmat(img, [1,1,3]);
% 显示灰度图像
imshow(img, []);
hold on; % 保持图像,准备叠加散点
% 示例数据:假设随机生成10个点的坐标和对应的误差
% 你可以根据实际数据替换这些值
num_points = 10; % 假设有10个点
col = randi([1, size(img, 2)], num_points, 1); % 随机生成列坐标 (X 方向)
row = randi([1, size(img, 1)], num_points, 1); % 随机生成行坐标 (Y 方向)
error = rand(num_points, 1) * 10; % 随机生成误差值,范围 [0, 10]
% 绘制散点图,点的颜色根据 error 值变化,使用 'filled' 填充点
scatter(col, row, 100, error, 'filled');
% 设置彩色映射(例如使用 jet colormap)
caxis([0,10]);colormap(jet);
% 添加颜色条,显示颜色与误差值的对应关系
colorbar;
% 设置图像坐标系反转,使得点的坐标与图像一致
set(gca, 'YDir', 'reverse');
% 设置轴标签
xlabel('Column (X)');
ylabel('Row (Y)');
% 设置标题
title('Error Distribution on Cameraman Image');
hold off; % 关闭图像保持
修改后代码结果如下: