【问题标题】:Histogram Equalization yielding unexpected results直方图均衡产生意想不到的结果
【发布时间】:2016-12-07 18:37:12
【问题描述】:

我有一系列亮度降低的图像,我想尝试通过直方图均衡来进行校正。我将histeq 应用于一些测试数据以了解该功能的工作原理

% Image that I would like to apply histogram equalization to
C = gallery('wilk',21);
figure, imagesc(C)

E = histeq(C);
figure, imagesc(E);

但是,当我查看histeq 的输出时,我得到的结果只有两个唯一值:0.8731.000。为什么输出不跨越输入的整个范围?我希望输出中有两个以上的唯一值。

【问题讨论】:

  • 你为什么不直接做imhist?它接受图像并在图中输出直方图。另外,直方图均衡后unique(C) 会返回什么?
  • 请出示您的直方图均衡代码。同时,您尝试过histeq吗?
  • 顺便说一句,imhist 不会返回空白输出。如果您查看强度 1,则所有强度都在归一化后映射到该强度。同样,您使用了错误的输入。
  • 尝试改用clim。直方图均衡对于您的目的来说太过分了。
  • @Masi Normalize C 在传递给histeq之前:histeq(mat2gray(C))

标签: matlab image-processing signal-processing histogram contrast


【解决方案1】:

根据histeq 的文档,如果输入的类型为doublesingle,则应在以下范围内:[0, 1]

适当范围内的强度值:[0, 1] 用于 double 类图像,[0, 255] 用于 uint8 类图像,[0, 65535] 用于 uint16 类图像。

您的数据未标准化,类型为double

whos C

%  Name       Size            Bytes  Class     Attributes
%
%  C         21x21             3528  double    

[min(C(:)), max(C(:))]
%   0   10

您需要先对其进行标准化。您可以使用mat2gray 来执行此操作:

E = histeq(mat2gray(C));

【讨论】:

  • 您可能正在使用imshow 进行绘图。 imshow 使数字成为实际大小(以像素为单位),因此它们会很小,因为它们是 21 x 21。此外,它默认为 gray 颜色图。使用imagesc
  • @Masi 你刚刚写的对我来说没有多大意义。很难说如何处理您的数据,因为我们看不到它。也许会问一个新的问题,即图像处理特定的问题,显示您为纠正数据而尝试做的事情?还包括数据本身并显示预期的输出。这个问题只是关于您滥用histeq
  • 您如何决定在histeq(Matrix) 中应用特定矩阵的hgram?等等,如果size(Matrix)1 2093809。我不喜欢在这里得到平坦的直方图。 - - 生成n=size(pTFD,2); hgram = ones(1,n)*prod(size(pTFD))/n; 是资源繁重的。
  • @Masi 我无法理解你的问题。直方图均衡化与计算直方图不同...
  • @Masi histeq 的输出将始终是输入的大小。您必须向其传递一维图像
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 2015-11-08
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2011-06-04
相关资源
最近更新 更多