img=imread('D:\pictures\lena1.jfif');%读入原彩色图像
imshow(img);%展现图像
%这个功能相当于把图片缩小,不同于裁剪,而是根据规定步长进行像素点的取舍
img_256=img(1:2:end,1:2:end);
%各一行取一列,步长为2,图的大小为256
%(取的第一个像素点是1,第二个是1+2=3,以此类推)
figure,imshow(img_256);
img_128=img(1:4:end,1:4:end);
figure,imshow(img_128);
提问:不知道为什么运行出来是三个并列的图片,应该是一个呀?
(解答:
语句*img=imread(‘D:\pictures\lena1.jfif’);读入的是彩色图像,颜色有三个维度,所以读进去的图片是三通道的。而语句img_256=img(1:2:end,1:2:end);*中没有对另外的一个维度说明,所以会默认第三个维度是存在的,*img_256=img(1:2:end,1:2:end,:)这样就是截了三个通道了,彩色的图要照顾到第三个维度。
ps:suoplot语句可以使图像img_256和img_128显示在同一个框里,并且在同一行。例如语句subplot(1,2,1); imshow(img);
subplot(1,2,2);imshow(img_256)*中121和122的意思:一行二列第一个位置,第二个位置
更改后的代码:
img=imread('D:\pictures\lena1.jfif');%读入原彩色图像
subplot(1,3,1),imshow(img);%展现图像
%这个功能相当于把图片缩小,不同于裁剪,而是根据规定步长进行像素点的取舍
img_256=img(1:2:end,1:2:end,:);
%各一行取一列,步长为2,图的大小为256
%(取的第一个像素点是1,第二个是1+2=3,以此类推)
subplot(1,3,2),imshow(img_256);
img_128=img(1:4:end,1:4:end,:);
subplot(1,3,3),imshow(img_128);
运行结果:
img=imread('D:\pictures\lena1.jfif');%读入原彩色图像
imshow(img);%展现图像
%只保留三个像素值,<100的像素置为0,100<= <200的置为150,>200的置为255
img_3=img;
%legth=find(img<100);%(函数find找具体点的位置)找所有大于100的像素值,运行结果非常多
%[row col]=find(img<100);%同上,但是改为用二维数组保存,这样运行结果较少
img_3(img_3<100)=0;
img_3((img_3>=100)&(img_3<200))=150;
img_3(img_3>=200)=255;
figure,imshow(img_3);
Ps:日常学习记录,随着日后的学习再来补充(已初步解决)