开发者

MATLAB - Restore central sub-section of an image

开发者 https://www.devze.com 2023-03-01 12:19 出处:网络
So, I have a 512x512 distorted image, but what I\'m trying to do is restore only a 400x400 centrally-positioned subsection of the image while it is still distorted outside of it. How do I go about imp

So, I have a 512x512 distorted image, but what I'm trying to do is restore only a 400x400 centrally-positioned subsection of the image while it is still distorted outside of it. How do I go about implementing something like that?

I was thinking to开发者_JAVA百科 have a for loop within a for loop like

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

But I'm not quite sure what to do next...


As a general rule, you can do a lot of things in MATLAB without loops using vectorization instead. As discussed in the comments below your question, there are filtering functions included with MATLAB such as medfilt2, wiener2 or imfilter which all work on two-dimensional images directly without the need for any loops.

To restore only the center part of your image, you apply the filter to the full image, store the result in a temporary variable and then copy over the part that you want into your distored image:

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

Of course if you don't care about edge effects during the reconstruction, you can just call the reconstruction for the part that interests you and avoid the tmpimage:

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

Note how the sizes in an assignment need to match: you can't assign finalimage(57:456,57:456)=medfilt2(distortedimage) since the right-hand-size produces a 512-by-512 matrix which doesn't fit into the 400-by-400 center of finalimage.

0

精彩评论

暂无评论...
验证码 换一张
取 消