使用imshow无法显示图像

时间:2015-08-28 02:49:47

标签: matlab image-processing

输入图片

.map()

我试图在图像上应用希尔伯特变换。我的目标是检测图像中的边缘。我无法显示图像。我的代码如下:

clear; close all;
I = imread('sub.png');
ty    = rgb2gray(I);
figure; imshow(ty)
ty= double(ty);
ty = adapthisteq(ty);
filtSize = 10; 
H1 = fspecial('gaussian',[filtSize,filtSize],2);
H2 = fspecial('gaussian',[filtSize,filtSize],2);
H = H2-H1;
Hedge = imag(hilbert(H));
Iodd = sqrt(imfilter(ty,Hedge).^2 + imfilter(ty,Hedge.').^2);
figure; imshow(Iodd)
G = log(Iodd);
G = max(G(:)) - G;
figure,
imshow(G), colorbar

输出是: Input

2)图像的梯度结果和希尔伯特变换之间是否存在差异?

2 个答案:

答案 0 :(得分:0)

您会看到一个黑色图像,因为它中的所有值都非常接近0,甚至可能是负值。要查看某些内容,您需要重新调整值。

根据您获得的错误,您的图片中必须有NaN。在显示之前尝试执行G(isnan(G)) = 0;

什么是min(G(:))?什么是max(G(:))?你对这个范围的期望是什么?

答案 1 :(得分:0)

它与输出完全无关。

在您的代码Iodd中,所有值均为零。这意味着log(Iodd)未定义,因此NaNG只是NaN

不幸的是,因为你不知道自己在做什么!

首先,adapthisteq需要双重图像,但是等待!数据类型为double且双重图像不完全相同的图像。双图像是0-1的图像,数据是双的图像只是记忆的图像。你想要0-1。因此,您不希望ty= double(ty);,您需要ty= im2double(ty);。在imshow(ty)之后添加adapthisteq,检查两者之间的差异。

然后是你的下一部分代码。你做了一些奇特的东西! hilbertimag,内核,......很好。不幸的是,再次,你犯了一个大错误!

我建议你仔细看看这段代码:

H1 = fspecial('gaussian',[filtSize,filtSize],2);
H2 = fspecial('gaussian',[filtSize,filtSize],2);
H = H2-H1;

如果你仔细观察,你会很快意识到你正在创建2个相同的内核并减去它们。猜猜H有什么价值。

您正在使用全零的内核过滤图像。然后取对数!!!!