我很失落,因为我有一个主管在这个项目上工作,但他离开了意外,现在我离开了没有任何支持或有人真正明白我想做什么,我可以提问,所以这些可能看起来非常微不足道:
我从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
答案 0 :(得分:0)
您可以通过窗口大小3 * 3对相邻像素求平均来初始化像素。然后像往常一样插入图像。
IMAGE1=load('img.jpg');
image_interpol = imresize(IMAGE1, 0.125, 'bicubic');
imresize
返回image_interpol
,其大小为IMAGE1
的0.125倍。
'bicubic'
是插值类型。