IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> MatLab:数字图像处理实验 -> 正文阅读

[人工智能]MatLab:数字图像处理实验

实验目的

1、熟悉并掌握MATLAB工具的使用;?
2、实现图像的读取、显示、存储、平移、镜像、放大、缩小及旋转操作;
3、掌握常用的插值方法,并了解其优缺点。

实验环境

MatLab2016

实验内容

题目一

读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分别显示RGB图像和灰度图像,注上文字标题,并将结果以文件形式存到磁盘上。

代码

I = imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg');
subplot(3,1,1);
imshow(I);
title('原图像');
i = rgb2gray(I);
subplot(3,1,2);
imshow(i);
title('灰度图像');
imwrite(i,'D:\Backup\Documents\My Pictures\Saved Pictures\picture2.jpg');
a = im2bw(I,0.5);
subplot(3,1,3);
imshow(a);
title('二值图像');
imwrite(a,'D:\Backup\Documents\My Pictures\Saved Pictures\picture3.jpg');

结果

在这里插入图片描述

题目二

对图像执行平移、镜像(水平镜像、垂直镜像)放大、缩小及旋转操作,其中放大、旋转操作分别采用最近邻插值及双线性插值方法实现,要求根据算法自己编写代码实现,并分析两种插值方法的优缺点。

平移

平移代码

I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg');
subplot(2,1,1);
imshow(I);
title('原图像');
[M,N,C]=size(I);
g=zeros(M,N,C);
 for color=1:3
      for i=1:M
          for j=1:N
             newx=i+30;
             newy=j+30;
             if((newx<=M)&&(newy<=N))
              g(newx,newy,color)=I(i,j,color);
             end
          end
      end
   end
subplot(2,1,2);
imshow(uint8(g));
title('平移');

平移结果

在这里插入图片描述

水平镜像

水平镜像代码

I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg');
subplot(2,1,1);
imshow(I);
title('原图像');

[M,N,C]=size(I);
g=zeros(M,N,C);
for color=1:3
      for i=1:M
         for j=1:N-1
           g(i,j,color)=I(i,N-j,color);
         end
      end 
end
subplot(2,1,2);
imshow(uint8(g));
title('水平镜像');

水平镜像结果

在这里插入图片描述

垂直镜像

垂直镜像代码

I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg');
subplot(2,1,1);
imshow(I);
title('原图像');
[M,N,C]=size(I);
g=zeros(M,N,C);
for color=1:3
for i=1:M-1
 for j=1:N
  g(i,j,color)=I(M-i,j,color);
 end
end
end
subplot(2,1,2);
imshow(uint8(g));
title(‘垂直镜像’);


垂直镜像结果

在这里插入图片描述

放大

放大代码

I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); 
figure;
imshow(I);
title('原图');
g=imresize(I,2);
figure;
imshow(g);
title('放大');

放大结果

在这里插入图片描述
在这里插入图片描述

缩小

缩小代码

I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); 
figure;
imshow(I);
title('原图');
g=imresize(I,0.5);
figure;
imshow(g);
title('缩放');

缩小结果

在这里插入图片描述

旋转

旋转代码

im = imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); % 读入图片
subplot(2,1,1);
imshow(im);
title('原图');
% 求出旋转矩阵
a = 30 / 180 * pi;
R = [cos(a), -sin(a); sin(a), cos(a)];
R = R'; % 求出旋转矩阵的逆矩阵进行逆向查找
% 计算原图大小
sz = size(im);
h = sz(1);
w = sz(2);
ch = sz(3);
c1 = [h; w] / 2;
% 计算显示完整图像需要的画布大小
hh = floor(w*sin(a)+h*cos(a))+1;
ww = floor(w*cos(a)+h*sin(a))+1;
c2 = [hh; ww] / 2; 
% 初始化目标画布
im2 = uint8(ones(hh, ww, 3)*128);
for k = 1:ch
    for i = 1:hh
       for j = 1:ww
          p = [i; j];
          pp = round(R*(p-c2)+c1);
          % 逆向进行像素查找
          if (pp(1) >= 1 && pp(1) <= h && pp(2) >= 1 && pp(2) <= w)
             im2(i, j, k) = im(pp(1), pp(2), k); 
          end
       end
    end
end
% 显示图像
subplot(2,1,2);
imshow(im2);
title('旋转');

旋转结果

在这里插入图片描述

双线性旋转

旋转代码

im = imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg');
subplot(2,1,1);
imshow(im);
title('原图');
% 求出旋转矩阵
a = 30 / 180 * pi;
R = [cos(a), -sin(a); sin(a), cos(a)];
R = R'; % 求出旋转矩阵的逆矩阵进行逆向查找 
% 计算原图大小
sz = size(im);
h = sz(1);
w = sz(2);
ch = sz(3);
c1 = [h; w] / 2; 
% 计算显示完整图像需要的画布大小
hh = floor(w*sin(a)+h*cos(a))+1;
ww = floor(w*cos(a)+h*sin(a))+1;
c2 = [hh; ww] / 2; 
% 初始化目标画布
im2 = uint8(ones(hh, ww, 3)*128);
for k = 1:ch
    for i = 1:hh
       for j = 1:ww
          p = [i; j];
          pp = (R*(p-c2)+c1);
          mn = floor(pp);
          ab = pp - mn;
          a = ab(1);
          b = ab(2);
          m = mn(1);
          n = mn(2);
          % 线性插值方法
          if (pp(1) >= 2 && pp(1) <= h-1 && pp(2) >= 2 && pp(2) <= w-1)
             im2(i, j, k) = (1-a)*(1-b)*im(m, n, k) + a*(1-b)*im(m+1, n, k)...
                          + (1-a)*b*im(m, n, k)     + a*b*im(m, n, k);
          end
       end
    end
end
% 显示图像
subplot(2,1,2);
imshow(im2);
title('线性旋转');

旋转结果

在这里插入图片描述
有参考许多csdn文章。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:22:35  更:2022-04-09 18:25:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:31:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码