How to compute the horizontal and vertical gradients of a gray-scale image without the use of imgradientxy()
2 次查看(过去 30 天)
显示 更早的评论
Hi guys, I'm completely new to matlab and am having some troubles with getting a seemingly trivial part of an assignment. I need to be able to find the horizontal and vertical gradients of a gray-scale image without the use of matlab functions such as imgradientxy(). The kernal I am using to find gradient is (-1,0,1). My attempt was to use loops to loop through the location of each pixel and change them one by one like so:
original = imread('grayscale.jpg')
[x,y] = size(original)
hor_grad = zeros(x,y)
ver_grad = zeros(x,y)
for i=1:x
for j=2:y-1
hor_grad(i,j) = -1*original(i,j-1)+original(i,j+1)
end
end
for i=2:x-1
for j=1:y
ver_grad(i,j) = -1*original(i-1,j)+original(i+1,j)
end
end
imshow(hor_grad)
imshow(ver_grad)
However I quickly learned that this approach will not work. I am at a loss here. What is a concise way to do this?
0 个评论
回答(1 个)
Arun Mathamkode
2017-10-19
Although this is not the best way of doing it, should also work fine. Please convert the original image to double before processing to avoid errors due to integer precision.
original = imread('grayscale.jpg');
original=double(original);
[x,y] = size(original);
hor_grad = zeros(x,y);
ver_grad = zeros(x,y);
for i=1:x
for j=2:y-1
hor_grad(i,j) = -1*original(i,j-1)+original(i,j+1);
end
end
for i=2:x-1
for j=1:y
ver_grad(i,j) = -1*original(i-1,j)+original(i+1,j);
end
end
figure;imshow(hor_grad,[])
figure;imshow(ver_grad,[])
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!