Image 如何在MATLAB中对缺失的图像像素进行插值?

Image 如何在MATLAB中对缺失的图像像素进行插值?,image,matlab,pixel,interpolation,Image,Matlab,Pixel,Interpolation,我当时很迷茫,我有一位主管正在做这个项目,但他出人意料地离开了,现在我离开了,没有任何支持,也没有真正了解我要做什么的人,我可以向他提问,所以这些可能看起来很琐碎: 我从一个512x512图像开始,向下采样到一个64x64像素的图像。我在下面所做的代码我想实现的主要内容是针对64x64位缺少像素的图像,我想使用conv2(或其他方法)找到缺少像素周围的最小强度差异,并使用该最小差异来知道插值方向。我该如何使用for循环编码来实现这一点 谢谢 function FYPDCT_Image() le

我当时很迷茫,我有一位主管正在做这个项目,但他出人意料地离开了,现在我离开了,没有任何支持,也没有真正了解我要做什么的人,我可以向他提问,所以这些可能看起来很琐碎:

我从一个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

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

IMAGE1=load('img.jpg');
image_interpol = imresize(IMAGE1, 0.125, 'bicubic');
imresize
返回
image\u interpol
,该值是
IMAGE1
大小的0.125倍。
'bicubic'
是插值类型。

看看这篇文章中的插值教程:如何初始化3x3的像素窗口?如何收集缺失像素周围的数据,以便将此信息放入3x3窗口,然后进行插值?您应该平均缺失像素周围的8个相邻像素,并通过计算出的平均值初始化缺失像素。