【发布时间】:2013-11-18 17:50:15
【问题描述】:
当我有一位负责这个项目的主管时,我很迷茫,但他出人意料地离开了,现在我离开时没有任何支持,也没有真正了解我想要做什么的人,我可以提出问题,所以这些可能看起来很琐碎:
我从 512x512 的图像开始,然后将样本缩减为 64x64 像素的图像。我在下面我想要实现的主要目标下完成的代码是针对丢失像素的 64x64 位图像,我想使用 conv2(或其他方法)找到丢失像素周围的最小强度差异,并具有这个最小差异知道插值的方向。我将如何措辞编码 for 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
【问题讨论】:
-
看看这篇文章中给出的插值教程:stackoverflow.com/a/20009314/2777181
标签: image matlab pixel interpolation