You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matlab中基于热图像与极坐标获取最高热特征的r和θ值

获取热图像中最高热特征的极坐标(r, theta)

你已经完成了BMP图像转热图、将图像中心作为原点转换极坐标的步骤,要获取全图最高热特征对应的r和theta,只需在现有代码基础上添加以下逻辑:

实现步骤

  1. 定位热图像中最大值的位置
  2. 根据位置提取对应的极坐标值
  3. 输出结果

修改后的完整代码

clc
close all
clear all

[img,cmap] = imread('test_thermal.bmp');
img = img(:,:,1);
[ny,nx] = size(img);

% 生成以图像中心为原点的笛卡尔坐标网格
y1d = -ny/2 + 1/2 : 1/2 : ny/2;
x1d = -nx/2 + 1/2 : 1/2 : nx/2;
[X2D,Y2D] = meshgrid(x1d,y1d);

figure()
imagesc(x1d,y1d,img);
colormap(cmap); % 保留原图像的颜色映射,更贴合热图显示

% 转换为极坐标(theta为弧度,radius为距离)
[theta2D, radius2D] = cart2pol(X2D,Y2D);
theta2Ddeg = rad2deg(theta2D); % 转换为角度

% ========== 新增:获取最高热特征的极坐标 ==========
% 找到图像中的最大值及其线性索引
[maxHeatVal, maxIdx] = max(img(:));
% 将线性索引转换为二维坐标
[maxRow, maxCol] = ind2sub(size(img), maxIdx);

% 提取对应位置的极坐标值
max_r = radius2D(maxRow, maxCol);
max_theta = theta2Ddeg(maxRow, maxCol);

% 输出结果
fprintf('最高热特征参数:\n');
fprintf('最大热值:%d\n', maxHeatVal);
fprintf('对应极坐标:r=%.2f,theta=%.2f°\n', max_r, max_theta);

代码说明

  • max(img(:)):将二维图像矩阵展平为一维,快速找到全局最大值及其线性索引
  • ind2sub(size(img), maxIdx):把线性索引转换为矩阵的行列坐标,对应图像中的像素位置
  • 直接通过行列坐标从radius2D和theta2Ddeg中提取极坐标值,确保与最大值位置完全对应

扩展说明

如果图像中存在多个像素具有相同的最高热值,你可以用以下方式获取所有对应极坐标:

% 找到所有最大值的位置
maxIdxAll = find(img == maxHeatVal);
% 转换为二维坐标
[maxRows, maxCols] = ind2sub(size(img), maxIdxAll);

% 提取所有对应极坐标
all_r = radius2D(maxRows, maxCols);
all_theta = theta2Ddeg(maxRows, maxCols);

% 输出所有结果
fprintf('共找到%d个最高热特征点:\n', length(maxIdxAll));
for i = 1:length(maxIdxAll)
    fprintf('第%d个:r=%.2f,theta=%.2f°\n', i, all_r(i), all_theta(i));
end

处理前图像
处理后图像

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:10:26