实验内容

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); heightwidth赋值为该图像的参数值

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*Nceil函数将数值

取整

    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

    L=2*L;

    quartimage=I(1:L:height,1:L:width);

    subplot(2,3,m+1);

    imshow(uint8(quartimage));

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');

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐