一、图片读取保存

(1)读取

  1. clear all
  2. [filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.gif'},'选择图片');
  3. if isequal(filename,0)
  4. disp('Users Selected Canceled');
  5. else
  6. str=[pathname filename];
  7. im = imread(str);
  8. imshow(im);
  9. end

(2)保存

  1. clear all
  2. x=0:0.01:2*pi;
  3. plot(x,sin(x));
  4.  
  5. [filename,pathname]=uiputfile({'*.bmp';},'保存图片');%路径和图片名
  6. if ~isequal(filename,0)
  7. str = [pathname filename];%路径名
  8. data= getframe(gcf);%图片内容数据
  9. imwrite(data.cdata,str,'bmp');
  10. % saveas(gcf,str,'bmp');%两种方式都可以保存图片
  11. close(gcf);
  12. else
  13. disp('保存失败');
  14. end

二、灰度图和彩色图

(1)

图像中的单个点称为像素(pixel),每个像素都有一个值,称为像素值,它表示特定颜色的强度。

对于黑白图,是指每个像素的颜色用二进制的1位来表示,那末颜色只有“1”和“0”这两个值。这也就是说,要么是黑,要么是白。

对于灰度图,如果不用合成的方式来表达,可以表示为(0),(123),(255)。

如果用颜色合成的方式来表达,即它的一个像素值往往用R,G,B三个分量表示,注意,是RGB合成来表示一个像素的颜色。但要注意的                    是RGB  分量必须都相等,否则就成彩色了。比如为(0,0,0)为黑,(123,123,123)为某种灰色,(255,255,255)为白。

  1. clear all;
  2. [filename,pathname]=uigetfile('*.*','select an image');
  3. sample=imread([pathname filename]);%原始图
  4. gray=rgb2gray(sample);%灰白图
  5. bw=im2bw(sample);%黑白图
  6. subplot(311),imshow(sample);
  7. title('原图')
  8. subplot(312),imshow(gray);
  9. title('灰度图')
  10. subplot(313),imshow(bw);
  11. title('黑白图')

 

(2)rgb三分量分别表示

  1. r=sample(:,:,1);
  2. g=sample(:,:,2);
  3. b=sample(:,:,3);
  4. subplot(131),imshow(r);
  5. subplot(132),imshow(g);
  6. subplot(133),imshow(b);

  

三、filter2、conv2和imfilter 平滑处理

(1)

  1. clear all;
  2. clear all
  3. [filename,pathname]=uigetfile('*.*','select an image');
  4. sample=imread([pathname filename]);
  5.  
  6. mean3Sample = filter2(fspecial('average',3),sample)/255;
  7. mean5Sample = filter2(fspecial('average',5),sample)/255;
  8. mean7Sample = filter2(fspecial('average',7),sample)/255;
  9. gaussianSample = filter2(fspecial('gaussian'),sample)/255;
  10.  
  11. subplot(2,2,1);
  12. imshow(sample); %原始图像
  13. title('原始图像')
  14.  
  15. subplot(2,2,2);
  16. imshow(mean3Sample); %采用均值进行平滑处理
  17. title('平均滤波器(3)平滑处理')
  18.  
  19. subplot(2,2,3);
  20. imshow(mean7Sample); %原始图像
  21. title('平均滤波器(7)平滑处理')
  22.  
  23. subplot(2,2,4);
  24. imshow(gaussianSample); %高斯滤波器进行平滑处理
  25. title('高斯滤波器平滑处理')
  26.  
  27. conv3Sample = conv2(fspecial('average',3),sample)/255;
  28. conv7Sample = conv2(fspecial('average',7),sample)/255;
  29. convSample = conv2(fspecial('gaussian'),sample)/255;
  30.  
  31. figure
  32. subplot(321),imshow(mean3Sample)
  33. title('filter2滤波')
  34. subplot(322),imshow(conv3Sample)
  35. title('conv2法')
  36.  
  37. subplot(323),imshow(mean7Sample)
  38. subplot(324),imshow(conv7Sample)
  39.  
  40. subplot(325),imshow(gaussianSample)
  41. subplot(326),imshow(convSample)

这两个函数只能针对二维图像。滤波器本质就是加权。

(2)分别采用’prewitt’和’sobel’边缘算子对图像做边缘增强处理,并显示边缘处理后的图像

  1. figure
  2. %采用’prewitt’算子:
  3. prewittSample = uint8(filter2(fspecial('prewitt'),sample));
  4. subplot(211),imshow(prewittSample);
  5. %采用’ sobel’算子:
  6. sobelSample = uint8(filter2(fspecial('sobel'),sample));
  7. subplot(212),imshow(sobelSample);

 

(3)采用“原图*2-平滑图像”,以及“原图+边缘处理图像”的方法锐化图像

  1. figure
  2. %采用“原图*2-平滑图像”方法:
  3. subSample = sample.*2 - uint8(mean7Sample);
  4. subplot(211),imshow(subSample);
  5. %采用“原图+边缘处理图像”方法
  6. addSample = sample + uint8(prewittSample);
  7. subplot(212),imshow(addSample);

(4)imfilter 彩色图像的平滑

  1. clear all;
  2. I = imread('lena.jpg'); %读取一张噪声图像
  3. %提取图像的三个(RGB)分量图像
  4. R = I(:,:,1);
  5. G = I(:,:,2);
  6. B = I(:,:,3);
  7. %生成一个8x8的均值滤波器
  8. w = fspecial('average',8);
  9. fR = imfilter(R,w,'replicate');
  10. fG = imfilter(G,w,'replicate');
  11. fB = imfilter(B,w,'replicate');
  12. fc_filtered = cat(3,fR,fG,fB); %三分量平滑后合为一个整体
  13. figure
  14. subplot(121); imshow(I);title('彩色噪声图像');
  15. subplot(122); imshow(fc_filtered);title('彩色图像平滑处理');

  1. clear all;
  2. I = imread('lena.jpg'); %读取一张噪声图像
  3. %提取图像的三个(RGB)分量图像
  4. R = I(:,:,1);
  5. G = I(:,:,2);
  6. B = I(:,:,3);
  7. %生成一个8x8的均值滤波器
  8. w = fspecial('average',8);
  9. fc_filtered = imfilter(I, w, 'replicate'); %不用rgb分量单独平滑,彩色图像的平滑函数
  10. figure
  11. subplot(121); imshow(I);title('彩色噪声图像');2
  12. subplot(122); imshow(fc_filtered);title('彩色图像平滑处理');

四、锐化处理

锐化本质是边缘增强,可以采用原图加边缘增强得到

(1)

  1. clear all
  2. A=imread('123.png');
  3. figure(1);
  4. subplot(2,2,1);
  5. imshow(A);
  6. title('原图');
  7.  
  8. I=double(A);
  9. h=[-1 -1 -1;-1 9 -1;-1 -1 -1];
  10. J=conv2(I,h,'same');
  11. K=uint8(J);
  12. subplot(2,2,2);
  13. imshow(J);
  14. title('使用拉普拉斯算子锐化处理后的图(double格式)');
  15. subplot(2,2,3);
  16. imshow(K);
  17. title('使用拉普拉斯算子锐化处理后的图(uint8格式)');
  18. L=(K+A)/2;
  19. subplot(2,2,4);
  20. imshow(L);
  21. title('原图+锐化');

(2)

  1. clear all
  2. A=imread('123.png');
  3. figure(1);
  4. subplot(3,2,1);
  5. imshow(A);
  6. title('原图');
  7.  
  8. BW=edge(A,'canny');%黑白图
  9. subplot(3,2,2);
  10. imshow(BW);
  11. title('candy算子边缘检测');
  12.  
  13. K=uint8(BW);%转换格式,1白色
  14. M=uint8(~K);%反转数值,1黑色
  15. L_1=A-50*M;%黑色区域增强
  16. subplot(3,2,3);
  17. imshow(L_1);
  18. title('黑色区域增强');
  19. L_2=(A+K*50);%白色区域增强
  20. subplot(3,2,4);
  21. imshow(L_2);
  22. title('白色区域增强');
  23.  
  24. L_3=A-50*M+50*K;
  25. subplot(3,2,5);
  26. imshow(L_3);
  27. title('黑白都增强');

(3)

  1. clear all;
  2. I=imread('lena.jpg');
  3. subplot(3,2,1),imshow(I);
  4. xlabel('a)原始图像');
  5.  
  6. H=fspecial('sobel');%sobel滤波器
  7. J=imfilter(I, H, 'replicate');%灰度值
  8. subplot(3,2,3),imshow(J);
  9. xlabel('Sobel锐化滤波处理');
  10. K=I+0.32*J;%比例相加
  11. subplot(324),imshow(K)
  12. xlabel('Sobel锐化滤波处理+原图');
  13.  
  14. H=fspecial('laplacian');%laplacian滤波器
  15. J=imfilter(I, H, 'replicate');%灰度值
  16. subplot(3,2,5),imshow(J);
  17. xlabel('laplacian锐化滤波处理');
  18. K=I+J;%比例相加
  19. subplot(326),imshow(K)
  20. xlabel('laplacian锐化滤波处理+原图');

滤波器决定了是锐化或者平滑

五、RGB和HSI

(1)直方图均衡

  1. clear all
  2. sourcePic=imread('lena.jpg');
  3. [m,n,o]=size(sourcePic);
  4. grayPic=rgb2gray(sourcePic);%灰度图
  5. subplot(321),imshow(sourcePic); title('原图')
  6. subplot(323),imshow(grayPic); title('灰度图')
  7.  
  8. gp=zeros(1,256); %计算各灰度出现的概率 0,255)出现的概率
  9. for i=1:256
  10. gp(i)=length(find(grayPic==(i-1)))/(m*n); %i灰度的概率
  11. end
  12. subplot(324),,bar(0:255,gp);
  13. title('原图像直方图');
  14. xlabel('灰度值');
  15. ylabel('概率');
  16. axis([0 256 0 0.02])
  17.  
  18. newGp=zeros(1,256); %计算新的各灰度出现的概率
  19. S1=zeros(1,256);
  20. S2=zeros(1,256);
  21. tmp=0;
  22. for i=1:256
  23. tmp=tmp+gp(i);
  24. S1(i)=tmp; %累计概率(映射到0~1
  25. S2(i)=round(S1(i)*256); %映射到0~255
  26. end
  27. %映射
  28. for i=1:256
  29. newGp(i)=sum(gp(find(S2==(i-1)))); %灰度值为联系
  30. end
  31. subplot(325),bar(0:255,newGp);
  32. title('均衡化后的直方图');
  33. xlabel('灰度值');
  34. ylabel('概率');
  35. axis([0 256 0 0.02])
  36.  
  37. newGrayPic=grayPic; %填充各像素点新的灰度值
  38. for i=1:256
  39. newGrayPic(find(grayPic==(i-1)))=S2(i);
  40. end
  41. subplot(326),imshow(newGrayPic);

  1. clear all
  2. sourcePic=imread('lena.jpg');
  3. [m,n,o]=size(sourcePic);
  4. subplot(121),imshow(sourcePic);
  5. title('原图')
  6. %%
  7. grayPic=sourcePic(:,:,1);
  8. gp=zeros(1,256); %计算各灰度出现的概率
  9. for i=1:256
  10. gp(i)=length(find(grayPic==(i-1)))/(m*n);
  11. end
  12.  
  13. newGp=zeros(1,256); %计算新的各灰度出现的概率
  14. S1=zeros(1,256);
  15. S2=zeros(1,256);
  16. tmp=0;
  17. for i=1:256
  18. tmp=tmp+gp(i);
  19. S1(i)=tmp;
  20. S2(i)=round(S1(i)*256);
  21. end
  22. for i=1:256
  23. newGp(i)=sum(gp(find(S2==i)));
  24. end
  25.  
  26. newGrayPic=grayPic; %填充各像素点新的灰度值
  27. for i=1:256
  28. newGrayPic(find(grayPic==(i-1)))=S2(i);
  29. end
  30. nr=newGrayPic;
  31. %%
  32. grayPic=sourcePic(:,:,2);
  33.  
  34. gp=zeros(1,256); %计算各灰度出现的概率
  35. for i=1:256
  36. gp(i)=length(find(grayPic==(i-1)))/(m*n);
  37. end
  38.  
  39. newGp=zeros(1,256); %计算新的各灰度出现的概率
  40. S1=zeros(1,256);
  41. S2=zeros(1,256);
  42. tmp=0;
  43. for i=1:256
  44. tmp=tmp+gp(i);
  45. S1(i)=tmp;
  46. S2(i)=round(S1(i)*256);
  47. end
  48. for i=1:256
  49. newGp(i)=sum(gp(find(S2==i)));
  50. end
  51.  
  52. newGrayPic=grayPic; %填充各像素点新的灰度值
  53. for i=1:256
  54. newGrayPic(find(grayPic==(i-1)))=S2(i);
  55. end
  56. ng=newGrayPic;
  57. %%
  58. grayPic=sourcePic(:,:,3);
  59.  
  60. gp=zeros(1,256); %计算各灰度出现的概率
  61. for i=1:256
  62. gp(i)=length(find(grayPic==(i-1)))/(m*n);
  63. end
  64.  
  65. newGp=zeros(1,256); %计算新的各灰度出现的概率
  66. S1=zeros(1,256);
  67. S2=zeros(1,256);
  68. tmp=0;
  69. for i=1:256
  70. tmp=tmp+gp(i);
  71. S1(i)=tmp;
  72. S2(i)=round(S1(i)*256);
  73. end
  74. for i=1:256
  75. newGp(i)=sum(gp(find(S2==i)));
  76. end
  77.  
  78. newGrayPic=grayPic; %填充各像素点新的灰度值
  79. for i=1:256
  80. newGrayPic(find(grayPic==(i-1)))=S2(i);
  81. end
  82. nb=newGrayPic;
  83. %%
  84. res=cat(3,nr,ng,nb);
  85. subplot(122),imshow(res);
  86. title('均衡化后的图像')

(2)hsi(色调、饱和度、亮度)和hsv(色调(H),饱和度(S),明度(V))。

  1. clear all
  2. % hsi = rgb2hsi(rgb)把一幅RGB图像转换为HSI图像,
  3. % 输入图像是一个彩色像素的M×N×3的数组,
  4. % 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。
  5. % 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。
  6. % 输入图像可能是double(取值范围是[0, 1]),uint8 uint16
  7. %
  8. % 输出HSI图像是double
  9. % 其中hsi(:, :, 1)是色度分量,它的范围是除以2*pi后的[0, 1];
  10. % hsi(:, :, 2)是饱和度分量,范围是[0, 1];
  11. % hsi(:, :, 3)是亮度分量,范围是[0, 1]。
  12.  
  13. % 抽取图像分量
  14. rgb=imread('lena.jpg');
  15. rgb = im2double(rgb);
  16. r = rgb(:, :, 1);
  17. g = rgb(:, :, 2);
  18. b = rgb(:, :, 3);
  19.  
  20. % 执行转换方程
  21. num = 0.5*((r - g) + (r - b));
  22. den = sqrt((r - g).^2 + (r - b).*(g - b));
  23. theta = acos(num./(den + eps)); %防止除数为0
  24.  
  25. H = theta;
  26. H(b > g) = 2*pi - H(b > g);
  27. H = H/(2*pi);
  28.  
  29. num = min(min(r, g), b);
  30. den = r + g + b;
  31. den(den == 0) = eps; %防止除数为0
  32.  
  33. S = 1 - 3.* num./den;
  34. H(S == 0) = 0;
  35. I = (r + g + b)/3;
  36.  
  37. % 3个分量联合成为一个HSI图像
  38. hsi = cat(3, H, S, I);
  39. subplot(121),imshow(hsi)
  40. title('hsi图像')

  41. subplot(122),imshow(rgb2hsv(rgb))%自带函数
  42. title('hsv图形')

MATLAB 图像打开保存的更多相关文章

  1. matlab 图像的保存

    gcf:获取当前显示图像的句柄: 默认 plot 的 position 是 [232 246 560 420] 0. save >> A = randn(3, 4); >> B ...

  2. MFC多文档中opencv处理图像打开、保存

    需要在C**Doc和C**View中进行相应修改 图像打开: Doc.cpp中: BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename) { I ...

  3. Win8 Metro(C#) 数字图像处理--1 图像打开,保存

    原文:Win8 Metro(C#) 数字图像处理--1 图像打开,保存 作为本专栏的第一篇,必不可少的需要介绍一下图像的打开与保存,一便大家后面DEMO的制作.   Win8Metro编程中,图像相关 ...

  4. Matlab中图片保存的5种方法

    matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的. Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工具 ...

  5. matlab的绘图保存

      matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的.Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工 ...

  6. Matlab中图片保存的四种方法

    matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的.Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工具箱 ...

  7. matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明

    转自:http://blog.csdn.net/fx677588/article/details/53301740 1. matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型( ...

  8. opencv::将两幅图像合并后,在同一个窗口显示;并将合并的图像流保存成视频文件

    /** * @file main-opencv.cpp * @date July 2014 * @brief An exemplative main file for the use of ViBe ...

  9. C#项目打开/保存文件夹/指定类型文件,获取路径

    C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325 ...

随机推荐

  1. H5多列布局

    多列布局 基本概念 1.多列布局类似报纸或杂志中的排版方式,上要用以控制大篇幅文本. 2.跨列属性可以控制横跨列的数量 /*列数*/ -webkit-column-count: 3; /*分割线*/ ...

  2. 2020年,大厂常问iOS面试题汇总!

    Runloop & KVO runloop app如何接收到触摸事件的 为什么只有主线程的runloop是开启的 为什么只在主线程刷新UI PerformSelector和runloop的关系 ...

  3. TensorFlow Serving实现多模型部署以及不同版本模型的调用

    前提:要实现多模型部署,首先要了解并且熟练实现单模型部署,可以借助官网文档,使用Docker实现部署. 1. 首先准备两个你需要部署的模型,统一的放在multiModel/文件夹下(文件夹名字可以任意 ...

  4. Windows下安装虚拟机

    一.准备工作 1.下载centos7操作系统 阿里巴巴站点: http://mirrors.aliyun.com/centos/7/isos/x86_64/ 2.下载VMware虚假机 可以直接通过3 ...

  5. python网络协议

    一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...

  6. MySQL记录操作(增删改)

    概览 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据 ...

  7. go 广度搜索案例(迷宫)

    package main import ( "fmt" "os" ) /* *将文档结构读入到切片中(二维数组) *row, col 行数 列数 (文档第一行数 ...

  8. git回滚到任意一个版本

    1.首先查找提交的记录(-3表示显示最近的3条) git log -3 2.强制回滚到制定版本 git reset --hard 制定版本commitId 如:git reset --hard 4ba ...

  9. JavaScript 预编译与作用域

    JavaScript 预编译与作用域 JavaScript 预编译的过程和作用域的分析步骤是 JS 学习中重要的一环,能够帮助我们知道代码的执行顺序,更好理解闭包的概念 预编译 JavaScript ...

  10. Spring注解 - 生命周期、属性赋值、自动装配

    一.Bean的生命周期 流程 Bean创建 -- 初始化 -- 销毁 创建: 单实例:在容器启动时创建对象 多实例:每次调用时创建对象 初始化: 都是在对象创建完成后,调用初始化方法 销毁: 单实例: ...