所以,我有一个512x512的扭曲图像,但我想要做的只是恢复图像的400x400居中定位的子部分,而它仍然在它外面扭曲。我该如何实现类似的东西?
我想在for循环中有一个for循环,比如
for row = 57:457
for col = 57:457
%some filter in here
end
end
但我不确定下一步该做什么......
答案 0 :(得分:1)
作为一般规则,您可以使用vectorization在MATLAB中执行很多操作而不使用循环。正如您在问题下面的评论中所讨论的那样,MATLAB中包含过滤函数,例如medfilt2
,wiener2
或imfilter
,它们都可以直接处理二维图像而无需任何循环。
要仅恢复图像的中心部分,请将过滤器应用于完整图像,将结果存储在临时变量中,然后将所需的部分复制到分散的图像中:
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最终图像中心。