【发布时间】:2018-09-15 14:39:51
【问题描述】:
我正在编写一个检测图像边缘的脚本。
这是脚本:
clear all; close all; clc;
c = rgb2gray(imread('image_S004_I0004.jpg'));
c = double(c);
k = imnoise(c, 'salt & pepper', 0.01);
gg = [-1 0 1;-2 0 2; -1 0 1];
gh = gg';
grad_g = conv2(k, gg);
grad_h = conv2(k, gh);
grad = sqrt(grad_g.^2 + grad_h.^2);
[r s] = size(grad);
T = 80;
for ii = 1:r
for jj = 1:s
if grad(ii, jj) < T
thresh_grad(ii, jj) = 0;
else
thresh_grad(ii, jj) = 1;
end
end
end
figure()
subplot(121); imshow(uint8(c));
subplot(122); imshow(thresh_grad);
这是我经常得到的:
左边是原始图像,右边应该是检测到边缘的图像(正如您在脚本中看到的,我在图像上添加了一些噪点 - 必须存在)。但无论阈值 T 的值是多少,我实际上一无所获。
你能帮我找出我的错误吗?
【问题讨论】:
-
没仔细看,但可能
c = double(c);应该是c = im2double(c);,最后imshow(uint8(c));应该只是imshow(c); -
或者
imshow(thresh_grad,[])? -
请注意,您可以将所有像素上的循环替换为
thresh_grad = grad >= T。 -
#Sardar Usama 它不起作用。仍然给我同样的结果。 #Cris Luengo 它不起作用
-
@Bacon:用
@字符标记人。否则我们不会收到通知。grad是什么样的?你对此满意吗?
标签: matlab image-processing edge-detection noise sobel