【问题标题】:Implementing Sobel Gradient in Octave在 Octave 中实现 Sobel 梯度
【发布时间】:2018-09-16 15:41:03
【问题描述】:

所以我应该在 Octave 中对图像应用 Sobel 过滤器,但我不能使用图像包中的任何功能。我编写了代码,但我的输出只是一个黑色图像。这是我目前所拥有的:

%Sobel Gradient

kx= [1 ,0 ,-1; 2,0,-2; 1, 0 ,-1];
ky= [1,2,1; 0,0, 0; -1, -2 ,-1];

H = conv2(kx,im2double(my_img),'same');
V = conv2(ky,im2double(my_img),'same');
E = sqrtm(H.*H + V.*V);
figure 4
imshow(E, [])

感谢您的帮助!

【问题讨论】:

  • 尝试在显示之前对图像进行标准化 - 我不擅长 Octave 但类似 E = max(0, E ./ (max(max(E)) / 255));
  • @MarkSetchell 在imshow 上的方括号应该做这项工作
  • @AnderBiguri 好的,谢谢!我断言我在 Octave 上不好的说法是正确的 :-)
  • @ray 这不是重复的,它不起作用的原因有很大不同!
  • @AnderBiguri 我笑不出来。您已经重新打开它。没关系。投我一票。

标签: matlab image-processing octave sobel


【解决方案1】:

几个小错误,你的问题就解决了:

1)您通过内核对图像进行卷积,而不是相反。主要是因为您使用的是'same',它将输出第一个输入的大小,3x3。

2) 你不需要matrix square root,只需要普通的元素平方根。

my_img=imread('cameraman.tif') % available in MATLAB, not sure octave
kx= [1 ,0 ,-1; 2,0,-2; 1, 0 ,-1];
ky= [1,2,1; 0,0, 0; -1, -2 ,-1];

H = conv2(im2double(my_img),kx,'same');
V = conv2(im2double(my_img),ky,'same');
E = sqrt(H.*H + V.*V); % or sqrt(H.^2+V.^2)
figure
imshow(E, [])

【讨论】:

  • 也给我投票吧,因为我在 Octave 上的成绩是我的 8,342,602 倍,尽管乘以我的大胖子零并不算多 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 2014-04-18
  • 2021-04-08
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多