image1=imread('C:\Users\lenovo\Desktop\1.jpg'); %读入图像
imshow(image1); %显示原图像
title('原始彩色图像');
imgGray = rgb2gray(image1); % 转为黑白图像
figure; % 建立一个新窗口
imshow(imgGray); % 显示转化后的黑白图像
title('转化后的黑白图像');
imwrite(imgGray,'gray.jpg');
image2=imgGray(:); %将原始图像写成一维的数据并设为image2
[c,r]=size(imgGray(:,:,1));
image2=imgGray(:); %同上
image2length=length(image2); %统计长度
for i = 1:1:image2length % 转换为1bit图像
if image2(i) >=127
image2(i) = 192;
end
if image2(i) <127
image2(i) = 64;
end
end
image3=reshape(image2,c,r); %重建二维数组图像,并设为image3
figure,imshow(image3)
title('压缩后的1bit图像');
for i=1:1:image2length
if (image2(i)>=0)&&(image2(i)<=63)
image2(i)=32;
end
if (image2(i)>=64)&&(image2(i)<=127)
image2(i)=96;
end
if (image2(i)>=128)&&(image2(i)<=191)
image2(i)=160;
end
if (image2(i)>=191)&&(image2(i)<=255)
image2(i)=224;
end
end
image4=reshape(image2,c,r); %重建二维数组图像,并设为image4
figure,imshow(image4)
title('压缩后的2bit图像');
for i=1:1:image2length
if (image2(i)>=0)&&(image2(i)<=32)
image2(i)=16;
end
if (image2(i)>=33)&&(image2(i)<=63)
image2(i)=48;
end
if (image2(i)>=64)&&(image2(i)<=96)
image2(i)=80;
end
if (image2(i)>=97)&&(image2(i)<=127)
image2(i)=112;
end
if (image2(i)>=128)&&(image2(i)<=160)
image2(i)=144;
end
if (image2(i)>=161)&&(image2(i)<=191)
image2(i)=176;
end
if (image2(i)>=192)&&(image2(i)<=224)
image2(i)=208;
end
if (image2(i)>=225)&&(image2(i)<=255)
image2(i)=240;
end
end
image5=reshape(image2,c,r); %重建二维数组图像,并设为image5
figure,imshow(image5)
title('压缩后的3bit图像');
X=image3(:); %令X为新建的二值图像的一维数据组
x=1:1:length(X); % 显示游程编码之前的图像数据
figure,plot(x,X(x));
title('编码前的图像数据');
for i = 1:1:length(X)
if X(i) ==192
X(i) = 1;
end
if X(i) ==64
X(i) = 0;
end
end
A1=reshape(X,c,r);
A=A1(6,:);%取第6行
j=1;
youcheng=[];
if A(1)==0;
youcheng(1)=1;
else
youcheng(1)=0;
j=2;
youcheng(2)=1;
end
for z=1:1:(length(A)-1)
if A(z)==A(z+1)
youcheng(j)=youcheng(j)+1;
else
youcheng(j+1)=1;
j=j+1;
end
end
s=1:j;
figure,stem(s,youcheng)
title('游程编码结果图')
youcheng