在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只显示黑色或白色,没有中间灰度值?

最佳答案

两个问题
使用IMGRADIENT计算的“gmag”和“gdir”具有双数据类型。
因此,如果你想显示它们,MATLAB会把它们当作
强度图像,并希望它们在[01]范围内。
因此,我们需要规范化“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图像中Lena正后方的条形结构,这在以前是看不到的。

10-07 13:38