Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab直方图函数_Matlab_Histogram - Fatal编程技术网

Matlab直方图函数

Matlab直方图函数,matlab,histogram,Matlab,Histogram,我对Matlab是新手,我的教授让我的学生编写(真正完成)一个自定义Matlab函数,用于从一组数据生成直方图。基本上,正在创建一个新的向量,L,该向量正在使用2D矩阵M中的信息进行更新。L的第一列包含来自M(i,j)的信息,第二列包含数据集中M(i,j)的计数(总数)。关于下一步如何进行,我需要一些指导 以下是我目前的情况: function L = hist_count(M) L = [ [0:255' zeros(256,1) ]; for i = 1:size(M,1) for

我对Matlab是新手,我的教授让我的学生编写(真正完成)一个自定义Matlab函数,用于从一组数据生成直方图。基本上,正在创建一个新的向量,
L
,该向量正在使用2D矩阵
M
中的信息进行更新。
L
的第一列包含来自
M(i,j)
的信息,第二列包含数据集中
M(i,j)
的计数(总数)。关于下一步如何进行,我需要一些指导

以下是我目前的情况:

function L = hist_count(M)

L = [ [0:255' zeros(256,1) ];
for i = 1:size(M,1)
    for j = 1:size(M,2)
        L(double(M(i,j))+1,2) = <<finish code here>>;
    end
end

figure;
plot(L(:1),L(:2));
函数L=历史计数(M)
L=[[0:255'零(256,1)];
对于i=1:尺寸(M,1)
对于j=1:尺寸(M,2)
L(double(M(i,j))+1,2)=;
结束
结束
图形
地块(L:1),L:2);
部分是我被卡住的地方。我了解一切,直到需要用信息更新
L

感谢您的帮助。

注意:您初始化的直方图
L
的括号不匹配。 删除第二个
[
代码中的括号。此外,创建
0:255
向量是不正确的。执行
0:255'
转换单个常数255,这意味着它仍然会创建一个
0:255
的水平向量,这将使代码失败。你应该用偏执来围绕这个向量的创建,then将结果转置。因此:

L = [ (0:255)' zeros(256,1) ];
现在谈谈实际问题。根据直方图的初始化判断,可能有256个值,因此您的输入很可能是
uint8
,这意味着数据中的值将仅来自
[0-255]
在第1步中。回想一下,直方图记录了您看到值的总次数。在这种情况下,您有一个两列矩阵,其中第一列告诉您要检查的值,第二列告诉您在数据中看到该值的次数。因此,每行告诉您要检查的值您的数据以及您在数据中看到该值的次数。请注意,计数都初始化为零,因此逻辑是每次看到值时,您都需要访问与数据点对应的右行,然后将该值增加1

因此,该行只需访问当前计数并向其添加1…然后将其存储回:

L(double(M(i,j))+1,2) = L(double(M(i,j))+1,2) + 1;

M(i,j)
是在位置
(i,j)处找到的值
在2D数据中。最后一个问题是,为什么将强度强制转换为
double
并添加1?因为输入可能是整数类型,所以将强度强制转换为
double
。这意味着超出类型动态范围的任何值都将饱和。因为输入类型为
uint8
,所以任何值都将超过255将饱和为255。在MATLAB中,我们将索引到从1开始的矩阵的行和列中,因为值可能从0开始,这对应于直方图的第1行,因此您必须偏移1。例如,当我们到达type
uint8
的值255的最极端情况时,使用本机
uint8
将饱和为255,这意味着254和255的值被集中到同一个容器中。因此,您必须转换为超出
uint8
限制的类型,然后加1以避免饱和。
double
通常作为默认值在此处执行,因为它比
uin具有更高的精度t8
,但任何精度高于
uint8
的类型都是合适的。

在初始化
L
时,括号不匹配。为什么要将索引增加到直方图中?您可能应该改为修改当前索引的值。感谢您的响应,这非常有帮助。但是,I c由于一个错误,
此时无法完全实现:
使用horzcat连接的矩阵的维数不一致的错误
。你能帮我演示一下如何从这里开始吗?啊,那是因为
0:255
的向量是错误的。请用偏执词围绕它:
(0:255)“
。发生的事情是,它通过转换单个常数255来创建一个水平向量,这是不正确的。我将更新我的帖子。啊!我的疏忽,我相信这就是[被诽谤,应该有两个周围的
0:255
。工作得很好!谢谢!@AndrewR。一点问题都没有。我应该注意到的。哎呀。我很高兴你明白了,不客气!