MATLAB - 恢复图像的中心子部分

时间:2011-04-30 04:02:46

标签: matlab

所以,我有一个512x512的扭曲图像,但我想要做的只是恢复图像的400x400居中定位的子部分,而它仍然在它外面扭曲。我该如何实现类似的东西?

我想在for循环中有一个for循环,比如

for row = 57:457
    for col = 57:457
        %some filter in here
    end
end

但我不确定下一步该做什么......

1 个答案:

答案 0 :(得分:1)

作为一般规则,您可以使用vectorization在MATLAB中执行很多操作而不使用循环。正如您在问题下面的评论中所讨论的那样,MATLAB中包含过滤函数,例如medfilt2wiener2imfilter,它们都可以直接处理二维图像而无需任何循环。

要仅恢复图像的中心部分,请将过滤器应用于完整图像,将结果存储在临时变量中,然后将所需的部分复制到分散的图像中:

tmpimage = medfilt2(distortedimage);
finalimage = distortedimage;
finalimage(57:456,57:456)=tmpimage(57:456,57:456);

当然,如果你在重建过程中不关心边缘效应,你可以只为你感兴趣的部分调用重建,并避免使用tmpimage

finalimage = distortedimage;
finalimage(57:456,57:456)=medfilt2(distortedimage(57:456,57:456));

请注意赋值中的大小如何匹配:您不能指定finalimage(57:456,57:456)=medfilt2(distortedimage),因为右手大小会生成512 x 512的矩阵,而不适合400-by- 400最终图像中心。