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怎么实现图像灰度级的量化,也就是灰度级压缩,从256级量化到16级