zoukankan      html  css  js  c++  java
  • 数字图像处理及MATLAB实现实验三——图像基本运算

    1.图像的点运算

    1.内容:

    对一灰度图像,通过选择不同的灰度变换函数s=T(r)实现图像的灰度变换范围线性扩展和非线性扩展,以及图像的灰度倒置和二值化

    2.实验方法:

    1.选择一幅图像lena.jpg,设置输入输出变换的灰度级范围,a=0.3,b=0.6,c=0.1,d=0.9。
    2.设置非线性扩展函数的参数c=2。
    3.采用灰度倒置变换函数s=255-r进行图像变换。
    4.设置二值化图像的阈值,分别为level=0.4,level=0.7参考程序如下。

    %1.图像的点运算
    %内容:对一灰度图像,通过选择不同的灰度变换函数s=T(r)实现图像的灰度变换范围线性扩展和非线性扩展,以及图像的灰度倒置和二值化
    %实验方法:
    % 1.选择一幅图像lena.jpg,设置输入输出变换的灰度级范围,a=0.3,b=0.6,c=0.1,d=0.9% 2.设置非线性扩展函数的参数c=2% 3.采用灰度倒置变换函数s=255-r进行图像变换。
    % 4.设置二值化图像的阈值,分别为level=0.4,level=0.7参考程序如下。
    I=imread('lena.jpg');
    figure;
    subplot(1,3,1);
    imshow(I);
    title('原图');
    J=imadjust(I,[0.3;0.6],[0.1;0.9]);%设置灰度变换的范围
    subplot(1,3,2);
    imshow(J);
    title('线性扩展');
    I1=double(I);%将图像转换为double类型
    I2=I1/255;%归一化此图像
    C=2;
    K=C*log(1+I2);%求图像的对数变换
    subplot(1,3,3);
    imshow(K);
    title('非线性扩展');
    M=255-I;
    figure;
    subplot(1,3,1);
    imshow(M);
    title('灰度倒置');
    N1=im2bw(I,0.4);%将此图像二值化,阈值为0.4
    N2=im2bw(I,0.7);%将此图像二值化,阈值为0.7
    subplot(1,3,2);
    imshow(N1);
    title('二值化阈值0.4');
    subplot(1,3,3);
    imshow(N2);
    title('二值化阈值0.7');

    2.图像的代数运算 

    内容:

    采用正确的图像代数运算方法,分别实现图像图像叠加,混合图像的分离和图像的局部显示效果 

    1.选取两幅大小一样的灰度图像iena.jpg和rice.jpg,将两幅图像进行加法运算,结果如图。

    I=imread('lena.jpg');
    I=rgb2gray(I);
    J=imread('rice.png');
    I=im2double(I);%将图像转换为double图像
    J=im2double(J);
    K=I+0.3*J;%两幅图像相加
    subplot(1,3,1);
    imshow(I);
    title('人物图');
    subplot(1,3,2);
    imshow(J);
    title('背景图');
    subplot(1,3,3);
    imshow(K);
    title('相加后的图');
    imwrite(K,'lena.jpg');

    2.选取一幅混合图像,如上述得到的lena.jpg,将混合图像与背景图像做减法运算,程序如下。

    A=imread('lena.jpg');B=imread('rice.png');
    C=A-0.3*B;%混合图减去背景图
    subplot(1,3,1);
    imshow(A);
    title('混合图');
    subplot(1,3,2);
    imshow(B);
    title('背景图');
    subplot(1,3,3);
    imshow(C);
    title('分离后的图');

    3.选取一幅尺寸为256*256像素的灰度图,如lena.jpg.设置掩模模板,对于需要保留下来的区域,掩模图像的值为1,而在被抑制掉的区域掩模图像的值置为0。

    A=imread('lena.jpg');
    A=rgb2gray(A);
    A=im2double(A);
    subplot(1,3,1);
    imshow(A);
    title('原图');
    B=zeros(256,256);
    B(40:200,40:200)=1;
    subplot(1,3,2);
    imshow(B);
    K=A.*B;
    subplot(1,3,3)
    imshow(K);
    title('局部图');

    3.图像的缩放

     将图片比例放大至1.5倍、0,7倍,非比例放大至420*384、150*180像素

    %将图片比例放大至1.5倍、0,7倍,非比例放大至420*384150*180像素
    A=imread('lena.jpg');
    B1=imresize(A,1.5);%比例放大至1.5倍
    subplot(1,4,1);
    imshow(B1);
    B2=imresize(A,[420 384]);%非比例放大至420*384像素
    subplot(1,4,2);
    imshow(B2);
    C1=imresize(A,0.7);%比例放大至0.7倍
    subplot(1,4,3);
    imshow(C1);
    C2=imresize(A,[150, 180]);%非比例放大至150*180像素
    subplot(1,4,4);
    imshow(C2);

    4.图像的旋转

     设置图像旋转的角度分别为45和90度,采用图像旋转函数imrotate对图像进行旋转

    %设置图像旋转的角度分别为45和90度,采用图像旋转函数imrotate对图像进行旋转
    I=imread('lena.jpg');
    J=imrotate(I,45);%图像采用逆时针旋转,默认采用最近邻插值法进行插值处理
    K=imrotate(I,90);%默认旋转出界的部分不被截出
    subplot(1,3,1);
    imshow(I);
    subplot(1,3,2);
    imshow(J);
    subplot(1,3,3);
    imshow(K);

  • 相关阅读:
    线程安全的signals
    排序
    TCMalloc : ThreadCaching Malloc
    C++箴言:争取异常安全的代码
    windows 内存泄露debug的相关函数
    分析几个驱动
    CAsyncSocket对象不能跨线程之分析 (转载)
    优化理论
    标 题: C++0x把Concept去掉了
    几个流行的http 服务器开源软件
  • 原文地址:https://www.cnblogs.com/zhying99/p/10727707.html
Copyright © 2011-2022 走看看