数字图像梳理--实验三

实验三 数字图像的基本运算2

实验目的:

1.利用matlab进行处理图像;

2.掌握常用的数字图像基本运算方法

3.掌握常用的几何运算,如平移,旋转,缩放等操作。

实验内容:

  1. 图像的平移:

(1)编写用于图像移动的函数move,如果超出显示区域,则裁剪;

(2)调用函数move,实现对原图像的平移。

请将实验代码贴在此处:

I=imread('lena.jpg');

J_1=move(I,50,50);

J_2=move(I,50,-50);

figure;

subplot(221);imshow(J_1);

subplot(222);imshow(J_2);

请将运行结果贴在此处:

  1. 自己编写函数,实现图像的转置和镜像;

请将实验代码贴在此处:

1.:

function J = trace(I)

[M,N,G] = size(I);

I = im2double(I);

J=ones(M,N,G);

for i=1:M

    for j=1:N

        J(i,j,:)=I(j,i,:);

    end

end

2.

function J = mirror_updown(I)

[M,N,G] = size(I);

I = im2double(I);

J=ones(M,N,G);

for i = 1:M;

   for j = 1:N;

     J(i,j) = I(M-i+1,j);                                

   end

end

3.:

function J = mirror_leftright(I)

[M,N,G] = size(I);

I = im2double(I);

J=ones(M,N,G);

for i = 1:M;

   for j = 1:N;

     J(i,j) = I(i,N-j+1);   %½«Ô­Ê¼Í¼ÏñÏñËػҶÈÖµÍê³É´¹Ö±¶Ôµ÷                               

   end

end

%%ͼƬ¾µÏñ

运行程序:

close all; clear all; clc;

I=imread('lena.jpg');

J=trace(I);

figure;

subplot(211);imshow(I);

subplot(212);imshow(J);

I=imread('lena.jpg');

J_1=mirror_updown(I);

J_2=mirror_leftright(I);

figure;

subplot(131);imshow(I);

subplot(132);imshow(J_1);

subplot(133);imshow(J_2);

请将运行结果贴在此处:

 

  1. 编程实现图像的旋转缩放
  1. 实现缩放:可以使用函数imresize实现图像的缩放
  2. 使用函数imtransform进行图像的旋转;在使用imtransform之前,需要用maketform函数定义变换参数,该函数会返回一个N维的仿射变换参数结构体,其调用格式如下:

T= maketform('affine', A);其中A为(N+1)*(N+1)或(N+1)*N的矩阵。

Imtransform的调用格式如下:

B=imtransform(A,T),B为变换后的图像,A为输入图像,T为用maketform函数定义的变换参数结构体;

事实上,imtransform可以做前面提到的所有几何变换。

请将实验代码贴在此处:

%%ͼÏñËõ·Å

close all;clear all;clc;

I=imread('lena.jpg');

J_1=imresize(I,0.5);

J_2=imresize(I,1.5);

figure;

subplot(131);imshow(I);title('ԭͼ');

subplot(132);imshow(J_1);title('ËõС0.5±¶');

subplot(133);imshow(J_2);title('·Å´ó1.5±¶');

%%ͼÏñÐýת

close all;clear all;clc;

I=imread('lena.jpg');

I=im2double(I);

A=[cosd(30),-sind(30),0; sind(30),cosd(30),0;0,0,1];%ÄæʱÕëÐýת30¶È

T=maketform('affine', A);

B=imtransform(I,T);

figure;

subplot(121);imshow(I);title('ԭͼ');

subplot(122);imshow(B);title('ÄæʱÕëÐýת30¶ÈºóµÄͼÏñ');

请将运行结果贴在此处:

  1. 利用函数imhist去观察图像的直方图,把给出的四幅图像(‘test1.jpg’-test4.jpg)的直方图显示在窗口中,并分析图像的直方图分布特征与对比度的关系。

请将实验代码贴在此处:

I_1=imread('test1.jpg');

I_2=imread('test2.jpg');

I_3=imread('test3.jpg');

I_4=imread('test4.jpg');

I_1=rgb2gray(I_1);

I_2=rgb2gray(I_2);

I_3=rgb2gray(I_3);

I_4=rgb2gray(I_4);

figure;

subplot(221);imhist(I_1);title('test1.jpg');

subplot(222);imhist(I_2);title('test2.jpg');

subplot(223);imhist(I_3);title('test3.jpg');

subplot(224);imhist(I_4);title('test4.jpg');

请将运行结果贴在此处:

5 实现最近邻插值和双线性插值算法。对‘lena.jpg’进行放大,采用两种插值方式,把结果显示在一个窗口中。

请将实验代码贴在此处:

img = imread('lena.jpg');

imshow(img);

title('original image');

[rows, cols, channels] = size(img);

newRows=300;

newCols=300;

newImg=uint8(zeros(newRows, newCols, channels));

rowScale=rows/newRows;

colScale=cols/newCols;

for channel = i:channels

    for i = 1:newRows

        for j = 1:newCols

            x=i*rowScale;

            y=j*colScale;

            

            x1=floor(x);

            x2=ceil(x);

            y1=floor(y);

            y2=ceil(y);

            

            x1=max(x1,1);

            x2=min(x2,rows);

            y1=max(y1,1);

            y2=min(y2,cols);

            

            fa=double(img(x1,y1,channel))*(x2-x)+double(img(x2,y1,channel))*(x-x1);

            fb=double(img(x1,y2,channel))*(x2-x)+double(img(x2,y2,channel))*(x-x1);

            pixelValue=fa*(y2-y)+fb*(y-y1);

            newImg(i,j,channel)=pixelValue/(x2-x1)*(y2-y1);

        end

    end

end

figure;

imshow(newImg);

title('Resize Image by Bilinear Interpolation');

img = imread('lena.jpg');

[rows, cols, channels] = size(img);

newRows=300;

newCols=300;

newImg=uint8(zeros(newRows, newCols, channels));

rowScale=rows/newRows;

colScale=cols/newCols;

for channel = i:channels

    for i = 1:newRows

        for j = 1:newCols

            x=round(i*rowScale);

            y=round(j*colScale);

            x=min(max(x,1),rows);

            y=min(max(y,1),cols);

            newImg(i,j,channel)=img(x,y,channel);

        end

    end

end

figure;

imshow(newImg);

title('Resize Image by Nearest Neighbor Interpolation');

请将运行结果贴在此处:

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值