当前位置:   article > 正文

数字图像处理之matlab大作业:基础版图像处理工具_matlab图像处理基础练习

matlab图像处理基础练习

前言

 这篇文章我会着重去写15个功能点要求以外的内容,主要包括摄像头拍照;图像叠加,相减等功能的小技巧;示波器;带阻滤波和同态滤波。全部内容的源码放在了最后。


摄像拍照

  1. imaqhwinfo%显示摄像头信息
  2. vid = videoinput('winvideo',1,'YUY2_640x480');%adaptorname、deviceID、format
  3. %deviceID不设置,系统自动寻找可用设备,format是视频格式
  4. set(vid, 'FramesPerTrigger', 1);%特定帧数显示预览效果
  5. set(vid, 'TriggerRepeat', Inf);%触发时间
  6. set(vid,'ReturnedColorSpace','rgb');%图像色彩域定义为RGB
  7. hf = figure('Units', 'Normalized', 'Menubar', 'None','NumberTitle', 'off', 'Name', '实时拍照系统');%定义窗口
  8. ha = axes('Parent', hf, 'Units', 'Normalized', 'Position', [0.1 0.17 0.8 0.8]);%定义展示预览的axes区域
  9. axis off
  10. %定义两个按钮控件的位置与功能
  11. %VideoResolution,图像分辨率
  12. hb1 = uicontrol('Parent', hf, 'Units', 'Normalized','Position',...
  13. [0.25 0.02 0.2 0.1], 'String', '预览', 'Callback', ['vidRes = get(vid, ''VideoResolution'');' ...
  14. 'nBands = get(vid, ''NumberOfBands'');' ...%色彩数目
  15. 'hImage = image(zeros(vidRes(2), vidRes(1), nBands));' ...%视频预览窗口对应的句柄
  16. 'preview(vid, hImage);']);
  17. hb2 = uicontrol('Parent', hf, 'Units', 'Normalized','Position',...
  18. [0.55 0.02 0.2 0.1], 'String', '拍照', 'Callback', ['imwrite(getsnapshot(vid), ''im.jpg'');'...
  19. 'img=(getsnapshot(vid));'...%getsnapshot 获取图像即拍摄
  20. 'image(img);'...
  21. %image(C) 会将数组 C 中的数据显示为图像。
  22. %C 的每个元素指定图像的 1 个像素的颜色。
  23. %生成的图像是一个 m×n 像素网格,其中 m 和 n 分别是 C 中的行数和列数。
  24. %这些元素的行索引和列索引确定了对应像素的中心。
  25. 'imshow(img);']);

效果是这样的

更详细的解释参考这个链接https://www.freesion.com/article/24761412909/


图像叠加的小技巧,一次可以选择两张图片,显示在一个axes内

核心代码是这样的

  1. [file,path] = uigetfile('*.*','请选择图片','multiselect','on','.\'); %multselect就是可以选择多张图片
  2. if isa(file,'char')%如果选择单张,file就是char
  3. file_path=fullfile(path,file);
  4. img=imread(file_path);
  5. image1=[handles.img,img];
  6. axes(handles.g1);
  7. imshow(image1);
  8. end
  9. if length(file)==2%如果选择两张,file就是数组
  10. file_path=fullfile(path,file);
  11. img=imread(file_path{1, 1});%读取数组元素
  12. img2=imread(file_path{1, 2});
  13. image1=[img,img2];%将两个图像放入一个矩阵中
  14. axes(handles.g1)
  15. imshow(image1);%显示拼合的图像
  16. end

效果图


 示波器

  1. r=handles.img(:,:,1);%分别取出三个通道的图像
  2. g=handles.img(:,:,2);
  3. b=handles.img(:,:,3);
  4. x=size(r);
  5. x=(1:x(1,2));%x(:)是为了将信号转换为一段连续的向量
  6. r=r(1,:);
  7. g=g(1,:);
  8. b=b(1,:);%b(:,1)表示矩阵b的第一列所有元素
  9. axes(handles.g4);
  10. cla;
  11. plot(x,r,'r');%坐标点为圆圈标志,且线型为红色短划线的绘图样式
  12. hold on
  13. plot(x,g,'g'); %坐标点为圆圈标志,且线型为绿色短划线的绘图样式
  14. plot(x,b,'b');%坐标点为圆圈标志,且线型为蓝色短划线的绘图样式
  15. hold off;
  16. ImageData1 = reshape(handles.img(:,:,1), [size(handles.img, 1) * size(handles.img, 2) 1]);%重构数组,单个通道与图像大小
  17. ImageData2 = reshape(handles.img(:,:,2), [size(handles.img, 1) * size(handles.img, 2) 1]);
  18. ImageData3 = reshape(handles.img(:,:,3), [size(handles.img, 1) * size(handles.img, 2) 1]);
  19. [H1, X1] = hist(ImageData1, 1:5:256);%直方图
  20. [H2, X2] = hist(ImageData2, 1:5:256);
  21. [H3, X3] = hist(ImageData3, 1:5:256);
  22. axes(handles.g5);
  23. cla;
  24. hold on;
  25. plot(X1, H1, 'r');%三条曲线合并
  26. plot(X2, H2, 'g');
  27. plot(X3, H3, 'b');
  28. axis([0 256 0 max([H1 H2 H3])]);%设置范围,横轴0-256,纵轴0-max([H1 H2 H3](最大直方图)


 带阻滤波

知识点参考这两个链接

http://www.360doc.com/content/22/0222/10/73571518_1018491236.shtml

https://blog.csdn.net/weixin_43249038/article/details/118651303

  1. I=imnoise(I,'gaussian',0,0.01);
  2. I=im2double(I);
  3. M=2*size(I,1);%滤波器行数
  4. N=2*size(I,2);%滤波器列数
  5. u=-M/2:(M/2-1);
  6. v=-N/2:(N/2-1);
  7. [U,V]=meshgrid(u,v);
  8. D=sqrt(U.^2+V.^2);
  9. D0=50;%滤波器D0
  10. W=30;%滤波器带宽
  11. H=double(or(D<(D0-W/2),D>D0+W/2));
  12. J=fftshift(fft2(I,size(H,1),size(H,2)));
  13. K=J.*H;
  14. L=ifft2(ifftshift(K));
  15. L=L(1:size(I,1),1:size(I,2));
  16. handles.img=L;
  17. axes(handles.g2);
  18. cla;
  19. imshow(handles.img);

同态滤波 

代码参考https://blog.csdn.net/m0_38127487/article/details/124161612

知识点参考https://blog.csdn.net/qq_40608730/article/details/105806085

  1. I=handles.img;
  2. J=log(im2double(I)+1);
  3. K=fft2(J);
  4. n=5;
  5. D0=0.1*pi;
  6. rh=0.7;
  7. rl=0.4;
  8. [row, column]=size(J);
  9. for i=1:row
  10. for j=i:column
  11. D1(i,j)=sqrt(i^2+j^2);
  12. H(i,j)=rl+(rh/(1+(D0/D1(i,j))^(2*n)));
  13. end
  14. end
  15. L=K.*H;
  16. M=ifft2(L);
  17. N=exp(M)-1;
  18. handles.img=N;
  19. axes(handles.g2);
  20. cla;
  21. imshow(handles.img);

 源码资源https://download.csdn.net/download/weixin_53034267/87123658?spm=1001.2014.3001.5503​​​​​​​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/257572
推荐阅读
相关标签
  

闽ICP备14008679号