在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只显示黑色或白色,没有中间灰度值?
答案 0 :(得分:4)
两个问题
<强>代码强>
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后面的条状结构,这在之前是不可见的。