Matlab中基于regionprops扩展边界绘图失败原因排查求助
问题排查与修正方案
我帮你梳理下代码里的几个关键问题,这应该就是你没法成功绘制扩展边界对象的原因:
1. 图像维度搞反了
Matlab中图像矩阵的维度是行×列,对应坐标里的y×x(因为C{1}是x坐标,对应列;C{2}是y坐标,对应行)。你代码里zeros(xMax ,yMax )把x和y的顺序写反了,会导致坐标和图像的维度不匹配,roipoly无法正确生成区域。
2. 边界扩展逻辑错误
你目前计算xMax = max(C{1})-10是缩小了x方向的范围,而不是扩展;而且完全没考虑最小坐标,这样图像的尺寸根本覆盖不了原始坐标,更别说向外扩展10个像素了。正确的做法是同时计算x和y的最小、最大值,然后向两边各扩展10。
3. 坐标未做映射调整
当你创建扩展后的图像时,原始坐标是基于原始坐标系的,需要转换为新图像内的像素索引(Matlab像素索引从1开始),不然roipoly会找不到正确的位置。
修正后的完整代码
clc; clear; filename = fullfile("E:/outline.txt"); fileID = fopen(filename); C = textscan(fileID,'%d %d'); fclose(fileID); % 提取原始坐标 x = C{1}; y = C{2}; % 计算扩展10像素后的边界 x_min = min(x) - 10; x_max = max(x) + 10; y_min = min(y) - 10; y_max = max(y) + 10; % 计算扩展后图像的尺寸(行×列,对应y×x) img_height = y_max - y_min + 1; img_width = x_max - x_min + 1; % 将原始坐标转换为新图像内的像素索引 x_roi = x - x_min + 1; y_roi = y - y_min + 1; % 创建空白图像并生成区域 bw = roipoly(zeros(img_height, img_width), x_roi, y_roi); imshow(bw); stats = regionprops(bw);
你试试这段代码,应该就能正确画出带扩展边界的对象了。
内容的提问来源于stack exchange,提问作者jane
相关产品推荐
相关产品推荐

