MATLAB 中 getrect 函数无法显示全部点,如何解决?

如下面图所示,使用 getrect 只有一个点显示在图框中,其他点都在坐标轴以外,请问这种如何解决。我的 matlab 版本是 2022b。

img


这张图是应该全部显示的点,上面的图是getrect后显示的点,坐标轴范围都不一样。

img

我引用ChatGPT作答:
可能出现这种情况的原因是,您的坐标轴范围(axis limits)可能不正确,导致 getrect 函数无法正确显示矩形框。

为了解决这个问题,您可以使用以下步骤:

1 手动设置坐标轴范围(axis limits),确保范围包含所有要显示的点。

2 在使用 getrect 函数之前,调用 "axis manual" 命令,以确保 MATLAB 不会自动缩放坐标轴。

3 使用 getrect 函数,以选择要显示的矩形框。

4 如果 getrect 后显示的点的坐标轴范围与您预期的不同,您可以手动调整坐标轴范围,以确保所有点都在坐标轴范围内。

例如,以下代码片段演示了如何使用 getrect 函数,并手动设置坐标轴范围:

% Create some data
x = linspace(0, 10, 100);
y = sin(x);

% Plot the data
plot(x, y);

% Manually set the axis limits
axis([0 10 -1 1]);

% Turn off automatic axis scaling
axis manual;

% Use getrect to select a rectangle
rect = getrect;

% Adjust axis limits if necessary


在这个例子中,我们首先手动设置了坐标轴范围,然后使用 getrect 函数选择一个矩形框。最后,我们可以手动调整坐标轴范围,以确保所有点都在坐标轴范围内。

引用chatGPT作答,在MATLAB中,getrect函数用于从图像中选择矩形区域。如果该函数只显示了一个点,而不是完整的矩形区域,则可能是因为您未正确使用该函数。

一种可能的解决方案是使用鼠标拖动矩形框,而不是仅点击一次。您可以按住鼠标左键并拖动以绘制完整的矩形框,然后释放鼠标左键。

如果仍然无法显示完整的矩形区域,请尝试调整MATLAB图窗的大小。使用set(gcf,'Position',[x,y,width,height])函数可以更改图窗的大小。例如,您可以尝试将宽度和高度增加一倍,以确保图像完全显示在图窗中。

另外,也可能是因为你使用了不兼容的 MATLAB 版本。可以尝试使用较新的 MATLAB 版本或更改计算机的显卡设置,例如调整分辨率或更改图形处理器选项。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7798735
  • 这篇博客也不错, 你可以看下【MATLAB】使用蒙特卡洛(随机取样)定理解决非线性整数规划问题
  • 除此之外, 这篇博客: 用Matlab录制、读取音频中的 又Get了一个技能!用matlab录制、读取、截取音频 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    matlab录制音频主要用的是audiorecorder函数,可以在命令行help一下它的用法,主要用法如下:

    recorder = audiorecorder
    recorder = audiorecorder(Fs,nBits,nChannels)
    recorder = audiorecorder(Fs,nBits,nChannels,ID)

    没有输入参数时,默认创建采样率为8000Hz,8bit,单通道的对象,有输入参数时,则由Fs指定采样率,单位为Hz,由nBits指定采样点的比特数,由nChannels指定通道数,由ID指定设备的ID。其中nChannels为1时表示单通道录音,即mono;为2时表示双通道录音,会产生立体音效果,即stereo。

    相关语句:
    get 获取audiorecorder对象的属性列表。
    getaudiodata 提取录音数据。
    getplayer 创建一个对应的audioplayer播音对象。
    isrecording 返回是否正在录音。
    pause 暂停录音。
    play 播放录音数据。该方法返回一个audioplayer对象。
    record 开始录音。
    recordblocking 录音,需要第二个参数,指定录音的时间长度,单位为秒。
    resume 从暂停处重新开始录音。
    set 设置audiorecorder对象的属性。
    stop 停止录音。

    下面就是我用audiorecorder的一段代码,录制了两秒音频,用的时候一般不需要怎么改,把秒数改为你需要的就行了

    clc;clear all;close all;
    % 录音录2秒钟
    recObj = audiorecorder;
    disp('Start speaking.')
    recordblocking(recObj,2);
    disp('End of Recording.');
    % 回放录音数据
    play(recObj);
    % 获取录音数据
    myRecording = getaudiodata(recObj);
    % 绘制录音数据波形
    plot(myRecording);
    audiowrite('sound.wav',myRecording,8000)
    
    

    获得的音频数据波形图如下,
    在这里插入图片描述
    可能是因为我的设备问题-_-前面总是录不到,所以我又找了截取音频的代码

    clc;clear all;close all;
    [x,fs] = audioread('sound.wav');%读取音频
    start_time = 0.5;
    end_time = 1.5;   %设置开始结束时间
    Y_new=x((fs*start_time+1):fs*end_time,1);  %截取新音频
    audiowrite('sound_new.wav',Y_new,fs); %写入新音频
    
    [signal,fs] = audioread('sound_new.wav');
    figure
    plot(signal)
    x=signal;
    title('signal of voice')
    
    

    最终得到的音频如下
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可能是因为坐标轴范围不够大导致了 getrect 函数无法显示全部点。您可以尝试使用以下代码来设置坐标轴范围:

x = [-1, 1, 1, -1, -1];
y = [-1, -1, 1, 1, -1];
figure();
plot(x,y);
axis([-2 2 -2 2]); % 设置坐标轴范围
rect = getrect; % 使用 getrect 函数获取矩形区域

在上述示例代码中,我们使用了 axis 函数来设置 x 和 y 坐标轴的范围,可以根据实际情况进行调整。然后就可以使用 getrect 函数来获取所需的矩形区域。

如果还是没有解决问题,可以尝试使用 xlimylim 函数来设置 x 和 y 轴限制。

xlim([-2 2]); % 设置 x 轴限制
ylim([-2 2]); % 设置 y 轴限制

希望这能够帮到您。
如果我的回答解决了您的问题,请采纳!

该回答引用ChatGPT
在使用 getrect 函数时,可能会出现所选择的矩形框区域只有一个点显示在图框中,其他点在坐标轴以外的问题。主要原因是选择的矩形框包含了坐标轴的边界导致图像显示部分被隐藏。

解决方法可以通过设置坐标轴的显示范围来解决。具体步骤如下:

1. 获取选框的坐标。

2. 对坐标进行处理,使坐标轴的显示范围包含选框及其周围部分。

3. 设置坐标轴的显示范围。

以下是示例代码:

matlab
% 读取图像
img = imread('test.jpg');

% 显示原始图像
figure;
imshow(img);

% 使用 getrect 获取选框坐标
rect = getrect;

% 获取选框的坐标
x = rect(1);
y = rect(2);
w = rect(3);
h = rect(4);

% 获取图像大小
[rows, cols, ~] = size(img);

% 计算坐标轴显示范围
xlim = [max(0, x-10), min(cols, x+w+10)];
ylim = [max(0, y-10), min(rows, y+h+10)];

% 设置坐标轴的显示范围
xlim(xlim==0) = 1;
ylim(ylim==0) = 1;
axis([xlim ylim]);

% 显示选框
hold on;
rectangle('Position', rect, 'EdgeColor', 'r', 'LineWidth', 2);


在代码中,我们首先读取图像并显示原始图像。然后使用 getrect 函数获取选框坐标 rect。接着,我们对坐标进行处理求出坐标轴的显示范围 xlim 和 ylim,并设置坐标轴的显示范围。最后,我们使用 rectangle 函数显示选框。

需要注意的是,坐标轴的显示范围需要根据具体情况进行计算,可能需要根据实际需要进行调整。同时,如果需要显示多个选框,可以使用 for 循环遍历每个选框并按照上述步骤进行显示。