所以,我有一个512x512扭曲的图像,但是我要做的是恢复图像的一个400x400的中心位置的子部分,而它仍然是扭曲的。我该如何实现这样的东西呢?
我想在for循环中加入一个for循环,比如
for row = 57:457
for col = 57:457
%some filter in here
end
end
但我不太确定下一步该怎么办…
作为一般规则,您可以在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乘512的矩阵,不适合finalimage的400乘400的中心