Matlab 非图像数据的直方图均衡化
我有一个包含负值和正值的矩阵: 我使用以下命令成功绘制其pdf:Matlab 非图像数据的直方图均衡化,matlab,histogram,Matlab,Histogram,我有一个包含负值和正值的矩阵: 我使用以下命令成功绘制其pdf: [n,xout] = hist(A(:), 256); pdf = n/numel(A); figure; stem(xout, pdf, 'marker', 'none'); ind = find(pdf == max(pdf)); cdf1 = cumsum(pdf(ind:end)); cdf2 = cumsum(pdf(ind-1:-1:1)); cdf = [flipud(cdf2); cdf1]; f
[n,xout] = hist(A(:), 256);
pdf = n/numel(A);
figure; stem(xout, pdf, 'marker', 'none');
ind = find(pdf == max(pdf));
cdf1 = cumsum(pdf(ind:end));
cdf2 = cumsum(pdf(ind-1:-1:1));
cdf = [flipud(cdf2); cdf1];
figure; stem(xout, cdf, 'marker', 'none');
不幸的是,我不能使用unique(A)
而不是256
,因为它会重复返回矩阵的值
这是pdf:
如何实现直方图均衡化?我使用以下命令计算pdf的累积总和:
[n,xout] = hist(A(:), 256);
pdf = n/numel(A);
figure; stem(xout, pdf, 'marker', 'none');
ind = find(pdf == max(pdf));
cdf1 = cumsum(pdf(ind:end));
cdf2 = cumsum(pdf(ind-1:-1:1));
cdf = [flipud(cdf2); cdf1];
figure; stem(xout, cdf, 'marker', 'none');
由此产生的cdf是:
这是真的吗?如果是,之后我该怎么办?最后,如何将均衡直方图转换为均衡图像(矩阵)
任何帮助都将不胜感激。如果X是您的矩阵,您只需执行以下操作:
[y, elements] = hist(X(:), unique(X));
stem(elements, y);
你有你的直方图那么以前版本中的
直方图
或历史
呢?谢谢你,MingiuX,但是为什么是唯一的(X)?我在参数中使用了256而不是unique(X),得到了一个类似于负分布的imhist的直方图。使用256而不是unique(X),您创建了一个由256个元素组成的元素
向量,因此您将X轴划分为256个不同的值,并且只对那些值赋予权重,这些值也可以在X
矩阵中找到。相反,使用unique(X),您将获得一个只包含一次考虑的矩阵元素的元素
向量(它们是您赋予权重不同于0的元素)。如果这个答案不清楚,试着打印两种情况下的元素向量,你就会明白。好的。非常感谢你。