-4

我有一系列亮度下降的图像,我想尝试用直方图均衡进行校正。我申请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。输出如何不能涵盖整个输入范围?我希望在输出中有两个以上的唯一值。

enter image description here

+1

为什么你不只是做'imhist'?它接受图像并在图中输出直方图。此外,在你的直方图均衡之后,'unique(C)'返回什么? – rayryeng

+0

请显示您的直方图均衡代码。同时,你是否尝试过“histeq”? – rayryeng

+0

啊。我只注意到现在输入的内容。它不起作用,因为你指定的输入是直方图均衡的废话。动态范围和强度分布非常小,一旦“标准化”就会炸掉范围。建议您在使用之前了解直方图均衡的工作原理。在进一步处理之前,请在实际图像上尝试此操作。例如,使用图像处理工具箱图像:'C = imread('pout.tif');'。 – rayryeng

回答

2

根据用于histeq的文档,如果输入是double类型或single的预期是在范围:[0, 1]。类UINT16的图像[0,1]类双图像,[0,255]用于类UINT8的图像,和[0,65535]:在适当范围内

的强度值。

你的数据不被标准化,是double型,

whos C 

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

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

您需要先归它。您可以使用mat2gray做到这一点:

E = histeq(mat2gray(C)); 

enter image description here

+1

您可能正在用'imshow'进行绘图。 'imshow'使数字成为实际尺寸(以像素为单位),所以它们会很小,因为它们是21 x 21.此外,它默认为“灰色”颜色映射。使用'imagesc'。 – Suever

+3

@Masi你刚写的东西对我来说没有多大意义。由于我们无法看到数据,因此很难说数据的适当处理方式。也许问一个新的问题,就是图像处理具体显示你试图做什么来纠正你的数据?还包括数据本身并显示预期输出。这个问题只是关于你错误地使用'histeq' – Suever

+0

你怎么能决定在'histeq(Matrix)'中应用哪个'hgram'来应用特定的矩阵?等如果'大小(矩阵)'是'1 2093809'。我不喜欢在这里得到平坦的直方图。 - - 生成n = size(pTFD,2); hgram = ones(1,n)* prod(size(pTFD))/ n;'是资源量大的。 –