实验内容
1、读入一幅RGB图像(sunset.jpg),分别转换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示这三幅图像,注上文字标题,即“原图像”、“灰度图像”、“二值图像”。
a = imread("L:\图像处理\实验文件\sunset.jpg");
i = rgb2gray(a);
I = im2bw(a,0.5);
subplot(3,1,1);imshow(a);title('原图像');
subplot(3,1,2);imshow(i);title('灰度图像');
subplot(3,1,3);imshow(I);title('二值图像');
2、说明以下程序的显示结果为何是一幅几乎全黑的图像。
clear; close all;
myi=zeros(20,20);
myi(2:2:18,2:2:18)=1;
myi=uint8(myi);
figure, imshow(myi,'notruesize');
由程序myi=uint8 (myi) ;可知此程序编写的图像在计算机中采用的是8位存储,即灰度
值为0^255,其中0为黑,255为白,中间值为由黑向白过度的值。而程序myi=zeros(20,20);
构造了一个20行20列的0值矩阵,程序myi (2:2:18, 2:2:18)=1;将1赋值给矩阵的2, 4,
6,8,10,12,14,16,18行和2,4,6,8,10,12,14,16,18列,即这些位置的值为
1。因为0, 1都在人眼识别的黑色范围内,固图像是全黑的
3、阅读分析下列程序,对每条语句给出注释,运行并解释最终执行结果;若将for循环改为方框中的程序,有何不同?
clear all;close all;
I=imread('d:\lena512.jpg');导入图像
[height,width]=size(I); 将height,width赋值为该图像的参数值
figure; 控制画图的窗口
subplot(2,3,1); subplot(2,3,1)是指一个2行3列的图中从左到右从上到下的第一个位置。
imshow(I); 展示i图像
title('原图像'); 标题
L=1; 定义L
for m=1:5 循环m的值,生成五幅图像
L=2*L; L等于L*2
quartimage=zeros(ceil(height/L),ceil(width/L));
zeros是生成全零的矩阵函数M*N,ceil函数将数值
取整
k=1;n=1;
for i=1:L:height 进行循环
for j=1:L:width
quartimage(k,n)=I(i,j); 将矩阵内的值进行修改
n=n+1; n值加一
end
k=k+1;n=1;
end
subplot(2,3,m+1); subplot(2,3,1)是指一个2行3列的图中从左到右从上到下的第一个位置。
imshow(uint8(quartimage)); 展示uint8格式的quatimage图像
end
|
因为使用for m=1:5 ,所以会循环5次循环内的条件,5次循环修改矩阵内的值,并展示图像,加上初试图像,所以共有6幅图像。
若改成框内程序,直接修改原图像的值,然后输出图像。
5、改变灰度图像的灰度分辨率(256颜色-128颜色-64颜色-32颜色-16颜色-8颜色-4颜色-2颜色),给出实验结果;图像大小不变的情况下,仿真改变图像的空间分辨率(变为原来的1/4(例如原图像(1,1);(1,2);(2,1);(2,2)四个像素值设成相同的值);1/16),给出实验结果。
分辨率变换:
close all;clear all;clc;
%通过imadjust()函数调整灰度图像的灰度范围
I=imread("L:\图像处理\实验文件\orangutan.tif");
for i=1:7
J=I(1:2^i:end,1:2^i:end);
figure;
subplot(2,1,1);imshow(I);title('原图')
subplot(2,1,2);imshow(J);title('8bits 变换');
end
不改变大小改变空间分辨率
clc;close all;
image = imread("L:\图像处理\实验文件\orangutan.tif"); %代表要处理的图像
mysize = size(image);
%把图像转换成灰度图
if numel(mysize) > 2
image = rgb2gray(image);
end
r_e = mysize(1);
c_e = mysize(2);
subplot(2,1,1); imshow(image,[]); title('Input Image');
temp1 = imresize(image,0.25); %表示把图像缩小到原来的1/4,但同时图像矩阵也变成了原来的1/4
[r_t2,c_t2] = size(temp1);
temp2 = zeros(r_e,c_e);
temp2(round(r_e/2)-floor(r_t2/2) : round(r_e/2)+ceil(r_t2/2)-1, round(c_e/2)-floor(c_t2/2) : round(c_e/2)+ceil(c_t2/2)-1) = temp1;%固定写法,具体了解matlab,调整大小
ss = temp2;
subplot(2,1,2); imshow(ss,[]); title('Minification');