我今天还有一个问题:我有一个二进制矩阵t,其中1代表河道,0代表洪水平面和周围的山脉:
t = Alog>10;
figure
imshow(t)
axis xy
为了进一步计算,我想在每个方向上将河道的面积扩大几个像素。一般来说,我希望在图像中显示更宽的通道,以便在以后的水力模型中包含更大的区域。
这是我的尝试,它在某些地区确实有效,但在河流与 xy 轴对角线的地区,它不会拓宽河道。似乎有一种接近这个的流程,我不能完全理解。
[q,o] = find(t == 1);
qq = zeros(length(q),11);
oo = zeros(length(o),11);
% add +-5 pixel to result
for z=1:length(q)
qq(z,:) = q(z)-5:1:q(z)+5;
oo(z,:) = o(z)-5:1:o(z)+5;
end
% create column vectors
qq = qq(:);
oo = oo(:);
cords = [oo qq]; % [x y]
% remove duplicates
cords = unique(cords,'rows');
% get limits of image
[limy limx] = size(t);
% restrict to x-limits
cords = cords(cords(:,1)>=1,:);
cords = cords(cords(:,1)<=limx,:);
% restrict to y-limits
cords = cords(cords(:,2)>=1,:);
cords = cords(cords(:,2)<=limy,:);
% test image
l = zeros(size(img));
l(sub2ind(size(l), cords(:,2)',cords(:,1)')) = 1;
figure
imshow(l)
axis xy
这是我得到的图像:
它确实在某些领域拓宽了渠道,但总的来说,我的方法似乎存在缺陷。当我在像素的对角线上使用相同的方法时,它根本不会加宽线,因为它只会创建更多对 [1 1; 2 2; 3 3; ETC]。有没有更好的方法来解决这个问题,甚至是图像处理领域的东西?具有设定直径的模糊滤镜的工作方式应该有点相似,但我找不到任何有用的东西......
PS:我不被允许添加图片,虽然我已经有 10 个代表,所以这里是直接链接:
http://imageshack.us/a/img14/3122/channelthin.jpg http://imageshack.us/a/img819/1787/channelthick.jpg