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

前言

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


摄像拍照

imaqhwinfo%显示摄像头信息
vid = videoinput('winvideo',1,'YUY2_640x480');%adaptorname、deviceID、format
%deviceID不设置,系统自动寻找可用设备,format是视频格式

set(vid, 'FramesPerTrigger', 1);%特定帧数显示预览效果
set(vid, 'TriggerRepeat', Inf);%触发时间
set(vid,'ReturnedColorSpace','rgb');%图像色彩域定义为RGB

hf = figure('Units', 'Normalized', 'Menubar', 'None','NumberTitle', 'off', 'Name', '实时拍照系统');%定义窗口
ha = axes('Parent', hf, 'Units', 'Normalized', 'Position', [0.1 0.17 0.8 0.8]);%定义展示预览的axes区域
axis off
%定义两个按钮控件的位置与功能
%VideoResolution,图像分辨率

hb1 = uicontrol('Parent', hf, 'Units', 'Normalized','Position',...
    [0.25 0.02 0.2 0.1], 'String', '预览', 'Callback', ['vidRes = get(vid, ''VideoResolution'');' ...
     'nBands = get(vid, ''NumberOfBands'');' ...%色彩数目
     'hImage = image(zeros(vidRes(2), vidRes(1), nBands));' ...%视频预览窗口对应的句柄
     'preview(vid, hImage);']);
hb2 = uicontrol('Parent', hf, 'Units', 'Normalized','Position',...
    [0.55 0.02 0.2 0.1], 'String', '拍照', 'Callback', ['imwrite(getsnapshot(vid), ''im.jpg'');'...
    'img=(getsnapshot(vid));'...%getsnapshot 获取图像即拍摄
    'image(img);'...
    %image(C) 会将数组 C 中的数据显示为图像。
    %C 的每个元素指定图像的 1 个像素的颜色。
    %生成的图像是一个 m×n 像素网格,其中 m 和 n 分别是 C 中的行数和列数。
    %这些元素的行索引和列索引确定了对应像素的中心。
    'imshow(img);']);

效果是这样的

数字图像处理之matlab大作业:基础版图像处理工具_第1张图片

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


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

核心代码是这样的

[file,path] = uigetfile('*.*','请选择图片','multiselect','on','.\'); %multselect就是可以选择多张图片
if isa(file,'char')%如果选择单张,file就是char
  file_path=fullfile(path,file);
img=imread(file_path);
image1=[handles.img,img];
axes(handles.g1);
imshow(image1);

end
if length(file)==2%如果选择两张,file就是数组
file_path=fullfile(path,file);
img=imread(file_path{1, 1});%读取数组元素
img2=imread(file_path{1, 2});
image1=[img,img2];%将两个图像放入一个矩阵中
axes(handles.g1)
imshow(image1);%显示拼合的图像
 end

效果图

数字图像处理之matlab大作业:基础版图像处理工具_第2张图片


 示波器

r=handles.img(:,:,1);%分别取出三个通道的图像
g=handles.img(:,:,2);
b=handles.img(:,:,3);
x=size(r);
x=(1:x(1,2));%x(:)是为了将信号转换为一段连续的向量
r=r(1,:);
g=g(1,:); 
b=b(1,:);%b(:,1)表示矩阵b的第一列所有元素
axes(handles.g4);
cla;
plot(x,r,'r');%坐标点为圆圈标志,且线型为红色短划线的绘图样式
hold on
plot(x,g,'g'); %坐标点为圆圈标志,且线型为绿色短划线的绘图样式
plot(x,b,'b');%坐标点为圆圈标志,且线型为蓝色短划线的绘图样式
hold off;

ImageData1 = reshape(handles.img(:,:,1), [size(handles.img, 1) * size(handles.img, 2) 1]);%重构数组,单个通道与图像大小
ImageData2 = reshape(handles.img(:,:,2), [size(handles.img, 1) * size(handles.img, 2) 1]);
ImageData3 = reshape(handles.img(:,:,3), [size(handles.img, 1) * size(handles.img, 2) 1]);
[H1, X1] = hist(ImageData1, 1:5:256);%直方图
[H2, X2] = hist(ImageData2, 1:5:256);
[H3, X3] = hist(ImageData3, 1:5:256);
axes(handles.g5); 
cla;
hold on;
plot(X1, H1, 'r');%三条曲线合并
plot(X2, H2, 'g');
plot(X3, H3, 'b');    
axis([0 256 0 max([H1 H2 H3])]);%设置范围,横轴0-256,纵轴0-max([H1 H2 H3](最大直方图)

数字图像处理之matlab大作业:基础版图像处理工具_第3张图片


 带阻滤波

知识点参考这两个链接

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

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

I=imnoise(I,'gaussian',0,0.01);
I=im2double(I);
M=2*size(I,1);%滤波器行数
N=2*size(I,2);%滤波器列数
u=-M/2:(M/2-1);
v=-N/2:(N/2-1);
[U,V]=meshgrid(u,v);
D=sqrt(U.^2+V.^2);
D0=50;%滤波器D0
W=30;%滤波器带宽
H=double(or(D<(D0-W/2),D>D0+W/2));
J=fftshift(fft2(I,size(H,1),size(H,2)));
K=J.*H;
L=ifft2(ifftshift(K));
L=L(1:size(I,1),1:size(I,2));
handles.img=L;
axes(handles.g2); 
cla; 
imshow(handles.img);

数字图像处理之matlab大作业:基础版图像处理工具_第4张图片

同态滤波 

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

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

I=handles.img;
J=log(im2double(I)+1);
K=fft2(J);
n=5;
D0=0.1*pi;
rh=0.7;
rl=0.4;
[row, column]=size(J);
for i=1:row
    for j=i:column
        D1(i,j)=sqrt(i^2+j^2);
        H(i,j)=rl+(rh/(1+(D0/D1(i,j))^(2*n)));
    end
end
L=K.*H;
M=ifft2(L);
N=exp(M)-1;
handles.img=N;
axes(handles.g2); 
cla; 
imshow(handles.img);

数字图像处理之matlab大作业:基础版图像处理工具_第5张图片

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

你可能感兴趣的:(matlab,图像处理,开发语言)