Matlab:imgradient返回量化图像

Posted

技术标签:

【中文标题】Matlab:imgradient返回量化图像【英文标题】:Matlab: imgradient returns quantized images 【发布时间】:2014-04-14 08:12:00 【问题描述】:

在 Matlab 中,我想显示灰度图像的梯度大小和方向。这是我正在尝试的代码:

image = imread('gray_image.bmp');
[gmag, gdir] = imgradient(image);
figure, imshow(image);
figure, imshow(gmag);
figure, imshow(gdir);

但是,gmag 和 gdir 似乎被量化为两个值:黑色和白色。 gmag 和 gdir 中的每个像素都是黑色或白色。我的图像本身具有一系列梯度幅度和方向。为什么这些没有出现在 gmag 和 gdir 图像中?是的,我希望 gmag 对于具有零梯度的像素具有纯黑色,对于具有最大梯度的像素具有纯白色,但我也希望它们之间的渐变具有一系列灰度值。同样,我希望 gdir 中有一系列灰度值表示角度范围。

例如,这里是灰度图:

这里是 gmag:

这里是 gdir:

为什么 gmag 和 gdir 只显示黑色或白色,没有中间灰度值?

【问题讨论】:

【参考方案1】:

两个问题

使用 IMGRADIENT 计算的“gmag”和“gdir”具有双重数据类型。 因此,如果您想这样显示它们,MATLAB 会将它们视为 强度图像,并期望它们在 [0 1] 范围内。 因此,我们需要对‘gmag’和‘gdir’进行归一化,如 稍后再编码。 如果您希望保存这些图像,MATLAB 需要 UINT8 数据类型和 这些值必须在 [0 255] 范围内。因此,在保存之前,您需要 将其乘以 255,然后转换为 UINT8。

代码

image = imread('gray_image.bmp');
[gmag, gdir] = imgradient(image);

%%// Normalize gmag and gdir
gmag = (gmag-min(gmag(:)))./(max(gmag(:))-min(gmag(:)));
gdir = (gdir-min(gdir(:)))./(max(gdir(:))-min(gdir(:)));

%%// Display images
figure, imshow(image);
figure, imshow(gmag);
figure, imshow(gdir);

%%// Save gradient images
imwrite(uint8(255.*gmag),'Lena_gmag.bmp');
imwrite(uint8(255.*gdir),'Lena_gdir.bmp');

输出图像

GMAG-

GDIR -

作为一项测试,现在可以在 GDIR 图像中注意到 Lena 身后的条状结构,这在以前是不可见的。

【讨论】:

以上是关于Matlab:imgradient返回量化图像的主要内容,如果未能解决你的问题,请参考以下文章

图像压缩基本matlab DCT+量化+huffman JPEG图像压缩含Matlab源码 1217期

毕设题目:Matlab图像压缩

如何用matlab减小图像的灰度级别

用matlab怎么实现图像灰度级的量化,也就是灰度级压缩,从256级量化到16级

EPI_H/EPI_V(边缘保持指数,matlab 矢量化编程)

百度matlab有啥函数可以自己命名后保存wav音频文件?注意!!!