如何在MATLAB中插入缺失的图像像素?

时间:2013-11-18 17:50:15

标签: image matlab pixel interpolation

我很失落,因为我有一个主管在这个项目上工作,但他离开了意外,现在我离开了没有任何支持或有人真正明白我想做什么,我可以提问,所以这些可能看起来非常微不足道:

我从512x512图像开始,然后向下采样到64x64像素图像。我想要实现的主要内容下面的代码是64x64位图像,缺少像素我想使用conv2(或其他方法)来找到丢失像素周围的最小强度差异,并且具有这个最小的差异知道要插入的方向。我如何用for循环来编写代码呢?

谢谢!

function FYPDCT_Image()

lena=imread('lena.bmp');
size(lena)
[m n p]=size(lena)
a=rgb2gray(lena);
imshow(a);
title('Original Grayscale Image');

lena_c=zeros(m,n,p);

lenad=a;

for i=1:16:512
    for j=1:16:512
        lenad(i:i+7,j:j+7)=0;
    end
end

%% DCT

subplot(2,2,1);
imshow(lenad)
[m n] = size(lenad)
title([num2str(m) ' X ' num2str(n)]);

subplot(2,2,2);
lenad_ds1=DS_DCT(lenad,8);
imshow(uint8(lenad_ds1));    
[m n] = size(lenad_ds1)
title([num2str(m) ' X ' num2str(n)]);

subplot(2,2,3);
lenad_ds2=DS_DCT(lenad_ds1,4);

imshow(uint8(255*lenad_ds2/max(max(lenad_ds2))));      
[m n] = size(lenad_ds2)
title([num2str(m) ' X ' num2str(n)]);

subplot(2,2,4);
lenad_ds3=DS_DCT(lenad_ds2,2);

imshow(uint8(255*lenad_ds3/max(max(lenad_ds3)))); 
[m n] = size(lenad_ds3)
title([num2str(m) ' X ' num2str(n)]);

kernel = [-1 -1 -1;-1 8 -1; -1 -1 -1]/8;

differenceImage = conv2(double(lenad_ds3), kernel, 'same');

differenceImage

%% Downsample by a factor of square(2) using DCT
function ImageOut=DS_DCT(ImageIn,MBsize)

[m n]=size(ImageIn);
k=1;
for i=1:MBsize:m-MBsize+1
    l=1;
    for j=1:MBsize:m-MBsize+1
        temp=ImageIn(i:i+MBsize-1,j:j+MBsize-1);
        tempDCT=dct2(temp);
        temp=idct2(tempDCT(1:MBsize/2,1:MBsize/2));
        ImageOut(k:k+MBsize/2-1,l:l+MBsize/2-1)=temp;
        l=l+MBsize/2;
    end
    k=k+MBsize/2;
end

1 个答案:

答案 0 :(得分:0)

您可以通过窗口大小3 * 3对相邻像素求平均来初始化像素。然后像往常一样插入图像。

IMAGE1=load('img.jpg');
image_interpol = imresize(IMAGE1, 0.125, 'bicubic');

imresize返回image_interpol,其大小为IMAGE1的0.125倍。 'bicubic'是插值类型。