从多个块形成单个图像而不获取棋盘图案

时间:2015-04-08 06:43:12

标签: matlab image-processing

我使用Hopfield神经网络处理400x400卫星图像。

然而,由于硬件问题,我无法将整个图像作为单个图像处理。因此,我将其分为50x50 each块。

然而,在处理这些块并将它们组合以形成单个图像之后,块的边界显示出来。我怎么能避免这个?

1 个答案:

答案 0 :(得分:0)

也许你可以在你的图像上运行两次相同的算法。通常做一次,然后稍微偏移你的块并重新做。然后将两者平均在一起,你仍然可以看到"棋盘"但它并不明显。您可能必须使用偏移来获得更理想的结果。此外,您可能会使代码更加智能,以便它不会改变图像大小,但这只是一个概念的快速证明。

我使用直方图均衡作为我的算法。你可以看到" avg of blocks"看起来更少"棋盘般的"。我甚至在整个图像处理和块之间做了区别。你可以看到平均值和整个图像之间的差异远小于两个块中的任何一个

enter image description here enter image description here     offset = 25;

fun = @(block_struct) histeq(block_struct.data)

%processes entire image, this is the baseline
a = histeq(im);

%does original block processing
b = blockproc(im,[125,125],fun);

%offsets the blocks and does processing again, please notice this
%changes the size of the image
c = blockproc(im(offset:end,offset:end),[125,125],fun);

%averages the two together (using the smaller image)
d= b(offset:end,offset:end)*.5+.5*c;

%the original image shows what processing the entire image loo
figure(1)
subplot(3,2,1:2);imshow(im);title('original')
subplot(3,2,3);imshow(a);title('operation on entire image')
subplot(3,2,4);imshow(d);title('avg of blocks')
subplot(3,2,5);imshow(b);title('blocks')
subplot(3,2,6);imshow(c);title('offset block')


figure(2);suptitle('difference between operation on entire image and block images')
subplot(2,2,1);imshow(a);title('operation on entire image')
subplot(2,2,2);imshow(abs(a(offset:end,offset:end)-d));title('avg of blocks')
subplot(2,2,3);imshow(abs(a-b));title('blocks')
subplot(2,2,4);imshow(abs(a(offset:end,offset:end)-c));title('offset block')