文档库 最新最全的文档下载
当前位置:文档库 › matlab读取图像并用串口发送

matlab读取图像并用串口发送

matlab读取图像并用串口发送
matlab读取图像并用串口发送

function varargout = serial_communication2(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @serial_communication2_OpeningFcn, ...

'gui_OutputFcn', @serial_communication2_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

function serial_communication2_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

warning('off');

javaFrame = get(hObject, 'JavaFrame');

javaFrame.setFigureIcon(javax.swing.ImageIcon('icon.jpg'));

%% 初始化参数

hasData = false; %表征串口是否接收到数据

isShow = false; %表征是否正在进行数据显示,即是否正在执行函数dataDisp isStopDisp = false; %表征是否按下了【停止显示】按钮

isHexDisp = false; %表征是否勾选了【十六进制显示】

isHexSend = false; %表征是否勾选了【十六进制发送】

numRec = 0; %接收字符计数

numSend = 0; %发送字符计数

strRec = ''; %已接收的字符串

%% 将上述参数作为应用数据,存入窗口对象内

setappdata(hObject, 'hasData', hasData);

setappdata(hObject, 'strRec', strRec);

setappdata(hObject, 'numRec', numRec);

setappdata(hObject, 'numSend', numSend);

setappdata(hObject, 'isShow', isShow);

setappdata(hObject, 'isStopDisp', isStopDisp);

setappdata(hObject, 'isHexDisp', isHexDisp);

setappdata(hObject, 'isHexSend', isHexSend);

guidata(hObject, handles);

function varargout = serial_communication2_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

function com_Callback(hObject, ~, handles)

function com_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

function rate_Callback(hObject, eventdata, handles)

function rate_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

function jiaoyan_Callback(hObject, eventdata, handles)

function jiaoyan_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

function data_bits_Callback(hObject, eventdata, handles)

function data_bits_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

function stop_bits_Callback(hObject, eventdata, handles)

function stop_bits_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

function start_serial_Callback(hObject, eventdata, handles)

% 【打开/关闭串口】按钮的回调函数

% 打开串口,并初始化相关参数

%% 若按下【打开串口】按钮,打开串口

if get(hObject, 'value')

%% 获取串口的端口名

com_n = sprintf('com%d', get(https://www.wendangku.net/doc/5b15698858.html,, 'value'));

%% 获取波特率

rates = [1200 2400 4800 9600 19200 38400 43000 56000 57600 115200 921600 1036800];

baud_rate = rates(get(handles.rate, 'value'));

%% 获取校验位设置

switch get(handles.jiaoyan, 'value')

case 1

jiaoyan = 'none';

case 2

jiaoyan = 'odd';

case 3

jiaoyan = 'even';

end

%% 获取数据位个数

data_bits = 5 + get(handles.data_bits, 'value');

%% 获取停止位个数

stop_bits = get(handles.stop_bits, 'value');

%% 创建串口对象

scom = serial(com_n);

%% 配置串口属性,指定其回调函数

set(scom, 'BaudRate', baud_rate, 'Parity', jiaoyan, 'DataBits',...

data_bits, 'StopBits', stop_bits,'InputBufferSize',1638400, 'OutputBufferSize',1638400,'BytesAvailableFcnCount', 10,...

'BytesAvailableFcnMode', 'byte', 'BytesAvailableFcn', {@bytes, handles},...

'TimerPeriod', 0.05, 'timerfcn', {@dataDisp, handles});

%% 将串口对象的句柄作为用户数据,存入窗口对象

set(handles.figure1, 'UserData', scom);

%% 尝试打开串口

try

fopen(scom); %打开串口

catch % 若串口打开失败,提示“串口不可获得!”

msgbox('串口不可获得!');

set(hObject, 'value', 0); %弹起本按钮

return;

end

%% 打开串口后,允许串口发送数据,清空接收显示区,点亮串口状态指示灯,

%% 并更改本按钮文本为“关闭串口”

set(handles.period_send, 'Enable', 'on'); %启用【自动发送】按钮

set(handles.manual_send, 'Enable', 'on'); %启用【手动发送】按钮

set(handles.xianshi, 'string', ''); %清空接收显示区

set(handles.activex1, 'value', 1); %点亮串口状态指示灯

set(hObject, 'String', '关闭串口'); %设置本按钮文本为“关闭串口”

else %若关闭串口

%% 停止并删除定时器

t = timerfind;

if ~isempty(t)

stop(t);

delete(t);

end

%% 停止并删除串口对象

scoms = instrfind;

stopasync(scoms);

fclose(scoms);

delete(scoms);

%% 禁用【自动发送】和【手动发送】按钮,熄灭串口状态指示灯

set(handles.period_send, 'Enable', 'off', 'value', 0); %禁用【自动发送】按钮

set(handles.manual_send, 'Enable', 'off'); %禁用【手动发送】按钮

set(handles.activex1, 'value', 0); %熄灭串口状态指示灯

end

function dataDisp(obj, event, handles)

global value

% 串口的TimerFcn回调函数

% 串口数据显示

%% 获取参数

hasData = getappdata(handles.figure1, 'hasData'); %串口是否收到数据

strRec = getappdata(handles.figure1, 'strRec'); %串口数据的字符串形式,定时显示该数据numRec = getappdata(handles.figure1, 'numRec'); %串口接收到的数据个数

%% 若串口没有接收到数据,先尝试接收串口数据

if ~hasData

bytes(obj, event, handles);

end

%% 若串口有数据,显示串口数据

if hasData

%% 给数据显示模块加互斥锁

%% 在执行显示数据模块时,不接收串口数据,即不执行BytesAvailableFcn回调函数setappdata(handles.figure1, 'isShow', true);

set(handles.xianshi, 'string', strRec);

%% 更新接收计数

set(handles.rec,'string', numRec);

%% 更新hasData标志,表明串口数据已经显示

setappdata(handles.figure1, 'hasData', false);

%% 给数据显示模块解锁

setappdata(handles.figure1, 'isShow', false);

end

function bytes(obj, ~, handles)

% 串口的BytesAvailableFcn回调函数

% 串口接收数据

%% 获取参数

strRec = getappdata(handles.figure1, 'strRec'); %获取串口要显示的数据

numRec = getappdata(handles.figure1, 'numRec'); %获取串口已接收数据的个数isStopDisp = getappdata(handles.figure1, 'isStopDisp'); %是否按下了【停止显示】按钮isHexDisp = getappdata(handles.figure1, 'isHexDisp'); %是否十六进制显示

isShow = getappdata(handles.figure1, 'isShow'); %是否正在执行显示数据操作

%% 若正在执行数据显示操作,暂不接收串口数据

if isShow

return;

end

%% 获取串口可获取的数据个数

n = get(obj, 'BytesAvailable');

%% 若串口有数据,接收所有数据

if n

%% 更新hasData参数,表明串口有数据需要显示

setappdata(handles.figure1, 'hasData', true);

%% 读取串口数据

a = fread(obj, n, 'uchar');

%% 若没有停止显示,将接收到的数据解算出来,准备显示

if ~isStopDisp

%% 根据进制显示的状态,解析数据为要显示的字符串

if ~isHexDisp

c = char(a');

else

strHex = dec2hex(a')';

strHex2 = [strHex; blanks(size(a, 1))];

c = strHex2(:)';

end

%% 更新已接收的数据个数

numRec = numRec + size(a,1);

%% 更新要显示的字符串

strRec = [strRec c];

end

%% 更新参数

setappdata(handles.figure1, 'numRec', numRec); %更新已接收的数据个数

setappdata(handles.figure1, 'strRec', strRec); %更新要显示的字符串

end

function qingkong_Callback(hObject, eventdata, handles)

%% 清空要显示的字符串

setappdata(handles.figure1, 'strRec', '');

%% 清空显示

set(handles.xianshi, 'String', '');

function stop_disp_Callback(hObject, eventdata, handles)

%% 根据【停止显示】按钮的状态,更新isStopDisp参数

if get(hObject, 'Value')

isStopDisp = true;

else

isStopDisp = false;

end

setappdata(handles.figure1, 'isStopDisp', isStopDisp);

function hex_disp_Callback(hObject, eventdata, handles)

%% 根据【十六进制显示】复选框的状态,更新isHexDisp参数

if get(hObject, 'Value')

isHexDisp = true;

else

isHexDisp = false;

end

setappdata(handles.figure1, 'isHexDisp', isHexDisp);

function manual_send_Callback(hObject, eventdata, handles)

scom = get(handles.figure1, 'UserData');

numSend = getappdata(handles.figure1, 'numSend');

val = get(handles.sends, 'UserData');

numSend = numSend + length(val);

set(handles.trans, 'string', num2str(numSend));

setappdata(handles.figure1, 'numSend', numSend);

%% 若要发送的数据不为空,发送数据

if ~isempty(val)

%% 设置倒计数的初值

n = 2000000;

while n

%% 获取串口的传输状态,若串口没有正在写数据,写入数据

str = get(scom, 'TransferStatus');

if ~(strcmp(str, 'write') || strcmp(str, 'read&write'))

fwrite(scom, val, 'uint8', 'async'); %数据写入串口

break;

end

n = n - 1; %倒计数

end

function clear_send_Callback(hObject, eventdata, handles)

%% 清空发送区

set(handles.sends, 'string', '')

%% 更新要发送的数据

set(handles.sends, 'UserData', []);

function period_send_Callback(hObject, eventdata, handles)

% 【自动发送】按钮的Callback回调函数

%% 若按下【自动发送】按钮,启动定时器;否则,停止并删除定时器

if get(hObject, 'value')

t1 = 0.001 * str2double(get(handles.period1, 'string'));%获取定时器周期

t = timer('ExecutionMode','fixedrate', 'Period', t1, 'TimerFcn',...

{@manual_send_Callback, handles}); %创建定时器

set(handles.period1, 'Enable', 'off'); %禁用设置定时器周期的Edit Text对象

set(handles.sends, 'Enable', 'inactive'); %禁用数据发送编辑区

start(t); %启动定时器

else

set(handles.period1, 'Enable', 'on'); %启用设置定时器周期的Edit Text对象

set(handles.sends, 'Enable', 'on'); %启用数据发送编辑区

t = timerfind; %查找定时器

stop(t); %停止定时器

delete(t); %删除定时器

end

%function period1_Callback(hObject, eventdata, handles)

function period1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');

end

function clear_count_Callback(hObject, eventdata, handles)

%% 计数清零,并更新参数numRec和numSend

set([handles.rec, handles.trans], 'string', '0')

setappdata(handles.figure1, 'numRec', 0);

setappdata(handles.figure1, 'numSend', 0);

function copy_data_Callback(hObject, eventdata, handles)

%% 设置是否允许复制接收数据显示区内的数据

if get(hObject,'value')

set(handles.xianshi, 'enable', 'on');

set(handles.xianshi, 'enable', 'inactive');

end

function figure1_CloseRequestFcn(hObject, eventdata, handles)

% 关闭窗口时,检查定时器和串口是否已关闭

% 若没有关闭,则先关闭

%% 查找定时器

t = timerfind;

%% 若存在定时器对象,停止并关闭

if ~isempty(t)

stop(t); %若定时器没有停止,则停止定时器

delete(t);

end

%% 查找串口对象

scoms = instrfind;

%% 尝试停止、关闭删除串口对象

try

stopasync(scoms);

fclose(scoms);

delete(scoms);

end

%% 关闭窗口

delete(hObject);

function hex_send_Callback(hObject,eventdata, handles)

%% 根据【十六进制发送】复选框的状态,更新isHexSend参数if get(hObject,'value')

isHexSend = true;

else

isHexSend = false;

end

setappdata(handles.figure1, 'isHexSend', isHexSend);

%% 更新要发送的数据

sends_Callback(handles.sends, eventdata, handles);

function sends_Callback(hObject,eventdata, handles)

% 数据发送编辑区的Callback回调函数

% 更新要发送的数据

%% 获取数据发送编辑区的字符串

str = get(hObject, 'string');

%% 获取参数isHexSend的值

isHexSend = getappdata(handles.figure1, 'isHexSend');

if ~isHexSend %若为ASCII值形式发送,直接将字符串转化为对应的数值val = double(str);

else %若为十六进制发送,获取要发送的数据

n = find(str == ' '); %查找空格

n =[0 n length(str)+1]; %空格的索引值

%% 每两个相邻空格之间的字符串为数值的十六进制形式,将其转化为数值

for i = 1 : length(n)-1

temp = str(n(i)+1 : n(i+1)-1); %获得每段数据的长度,为数据转换为十进制做准备

if ~rem(length(temp), 2)

b{i} = reshape(temp, 2, [])'; %将每段十六进制字符串转化为单元数组else

break;

end

end

val = hex2dec(b)'; %将十六进制字符串转化为十进制数,等待写入串口

end

%% 更新要显示的数据

set(hObject, 'UserData', val);

% --- Executes on button press in open.

function open_Callback(hObject, eventdata, handles)

[name,path]=uigetfile('*.*','');

file=[path,name];

axes(handles.axesl);

x=imread(file);

handles.img=x;

guidata(hObject,handles);

imshow(x);

IM2=imread(file);

[row,col,h]=size(IM2);

red=IM2(:,:,1);

red1=uint16(red);

red2=bitshift(red1,-3);

red=bitshift(red2,11);

test1=dec2bin(red(1));

green=IM2(:,:,2);

green1=uint16(green);

green2=bitshift(green1,-2);

green=bitshift(green2,5);

test2=dec2bin(green(1));

blue=IM2(:,:,3);

blue1=uint16(blue);

blue2=bitshift(blue1,-3);

blue=blue2;

test3=dec2bin(blue(1));

IM3=red+green+blue;

[n,m]=size(IM3);

im=zeros(n,2*m);

fid=fopen('image.txt','w');

for ii=1:n

for jj=1:m

temp=dec2hex(IM3(ii,jj),4);

fprintf(fid,'%s %s ',temp(1:2),temp(3:4));

end

% fprintf(fid,'\r');

end

fclose(fid);

%以只读、文本方式打开文本文件

fid=fopen('image.txt','rt');

a1=fread(fid);

%将文本字符ASCII值转换为字符串

a2=char(a1');

%把文本中图像数据显示在输入窗口

set(handles.sends,'string',a2);

%每次打开图像就更新要发送的数据

sends_Callback(handles.sends, eventdata, handles);

基于matlab的图像识别与匹配

基于matlab的图像识别与匹配 摘要 图像的识别与匹配是立体视觉的一个重要分支,该项技术被广泛应用在航空测绘,星球探测机器人导航以及三维重建等领域。 本文意在熟练运用图像的识别与匹配的方法,为此本文使用一个包装袋并对上面的数字进行识别与匹配。首先在包装袋上提取出来要用的数字,然后提取出该数字与包装袋上的特征点,用SIFT方法对两幅图进行识别与匹配,最终得到对应匹配数字的匹配点。仿真结果表明,该方法能够把给定数字与包装袋上的相同数字进行识别与匹配,得到了良好的实验结果,基本完成了识别与匹配的任务。

1 研究内容 图像识别中的模式识别是一种从大量信息和数据出发,利用计算机和数学推理的方法对形状、模式、曲线、数字、字符格式和图形自动完成识别、评价的过程。 图形辨别是图像识别技术的一个重要分支,图形辨别指通过对图形的图像采用特定算法,从而辨别图形或者数字,通过特征点检测,精确定位特征点,通过将模板与图形或数字匹配,根据匹配结果进行辨别。 2 研究意义 数字图像处理在各个领域都有着非常重要的应用,随着数字时代的到来,视频领域的数字化也必将到来,视频图像处理技术也将会发生日新月异的变化。在多媒体技术的各个领域中,视频处理技术占有非常重要的地位,被广泛的使用于农业,智能交通,汽车电子,网络多媒体通信,实时监控系统等诸多方面。因此,现今对技术领域的研究已日趋活跃和繁荣。而图像识别也同样有着更重要的作用。 3 设计原理 3.1 算法选择 Harris 角点检测器对于图像尺度变化非常敏感,这在很大程度上限制了它的应用范围。对于仅存在平移、旋转以及很小尺度变换的图像,基于Harris 特征点的方法都可以得到准确的配准结果,但是对于存在大尺度变换的图像,这一类方法将无法保证正确的配准和拼接。后来,研究人员相继提出了具有尺度不变性的特征点检测方法,具有仿射不变性的特征点检测方法,局部不变性的特征检测方法等大量的基于不变量技术的特征检测方法。 David.Lowe 于2004年在上述算法的基础上,总结了现有的基于不变量技术的特征检测方法,正式提出了一种基于尺度空间的,对图像平移、旋转、缩放、甚至仿射变换保持不变性的图像局部特征,以及基于该特征的描述符。并将这种方法命名为尺度不变特征变换(Scale Invariant Feature Transform),以下简称SIFT 算法。SIFT 算法首先在尺度空间进行特征检测,并确定特征点的位置和特征点所处的尺度,然后使用特征点邻域梯度的主方向作为该特征点的方向特征,以实现算子对尺度和方向的无关性。利用SIFT 算法从图像中提取出的特征可用于同一个物体或场景的可靠匹配,对图像尺度和旋转具有不变性,对光照变化、

MATLAB在二元阵方向图乘积定理教学中的应用

摘 要 本文针对天线与电波传播理论课程学习,基于MATLAB语言对二元相似阵方向图乘积定理的进行验证。 关键词 二元相似阵 MATLAB仿真 方向图 1 引言 天线理论分析实质就是求解满足特定边界条件的麦克斯韦方程组。但电磁理论抽象、数学推导较为繁琐以及空间概念难以想象等诸多特点,因此利用MATLAB强大的工程绘图功能,对天线进行辅助分析、设计和仿真等就显得格外重要。本文针对天线理论课程学习,利用MATLAB语言对二元对称振子相似阵进行仿真,其中包括阵因子方向图、方向图乘积定理。实践证明:利用该软件通过计算机仿真,不仅能够帮助学生理解和掌握二元相似阵基本理论,提高学生的学习效率与学习积极性,而且有助于提高学生利用MATLAB来分析解决实际问题的方法与技巧。 2 二元阵的方向性 对于二元相似阵,以天线1为参考天线,天线2相对于天线1的电流关系为I 2=mI 1e jξ,即:天线2的电流振幅为天线1的m 倍,初始相位超前ξ。则天线阵合成方向函数 为 = (1)其中 为天线1的方向性函数称为元因子; 只与两天线的电流比与相对位置有关称为阵因子;ψ=ξ+kdcosδ,k为波数,d为两元天线的间距,δ为电波射线与天线阵轴线之间的夹角。式(1)表明由相似元组成的二元阵,其方向函数(或方向图)等于单元天线的方向函数(或方向图)与阵因子(或方向图)的乘积,这就是方向图乘积定理。 3 方向图乘积定理的验证 3.1 验证二元齐平行阵方向图乘积定理 两个半波振子的轴线沿z轴方向,并沿y轴方向组成二元齐平行阵,其间距d=0.25λ,电流 ,验证方向图乘积定理。根据题意可得: 3.1.1 E面方向图乘积定理的验证。根据题意可知,E面为(yOz 即: ),因此E面方向性函数为: 根据方向性函数,利用Matlab画出E面元因子、阵因子、二元阵方向图如图7所示: MATLAB在二元阵方向图乘积定理教学中的应用 侯维娜 刘占军 (重庆邮电大学光电工程学院) 3.1.2 H面方向图乘积定理的验证。根据题意可知,H面为(xoy 即 : ),因此H面方向性函数为: 根据方向性函数,利用Matlab画出H面元因子、阵因子、二元阵方向图如图8所示 3.2 验证二元共线阵方向图乘积定理 两个半波振子的轴线沿y轴方向,并沿y轴方向组成二元共线阵,其间距d=λ,电流比Im 2=Im 1,验证方向图乘积定理。根据题意可得: 3.2.1 E面方向图乘积定理的验证。根据题意可知,E面为(yOz 即: ),因此E面方向性函数为: 根据方向性函数,利用Matlab画出E面元因子、阵因子、二元阵方向图如图9所示: 3.2.2 H面方向图乘积定理的验证 根据题意可知,H面为(xoz即 :),因此H面方向性函数为: f 2元阵H =1×2 可见H面元因子和阵因子都是常数(方向图为一个圆), 比较简单,故不作方向图。 通过对以上实例分析可知,利用Matlab验证方向图乘积定理简单、直观且快速,Matab在天线阵列分析中的重要性显而易见。 4 结束语 天线阵列能够增强辐射方向性,在现实生活中具有重要 (下转第111页)

MATLAB仿真设计

MATLAB仿真设计 系院:电子与电气工程学院 专业:电子信息工程 班级: 学号; 姓名: 指导老师: 学期;2013-2014学年第一学期 题目:铅酸电池充放电仿真模型

铅蓄电池充放电的仿真模型 本学期学习了matlab中simulink仿真系统,本文将介绍如何通过simulink来实现铅酸电池的充放电模型。首先要了解铅酸电池充电的化学原理,之后建立相应的化学模型,通过化学模型来实现理论上的成立。然后借助所学的matlab中的simulink仿真系统来实现电池的充放电模型。 内容摘要:simulink 铅酸电池仿真 一:铅酸电池的化学原理和公式 铅酸电池的工作机理是对铅酸蓄电池进行深入研究的基础,因此在讨论其他问题之前先进性简要的介绍。 1,铅酸电池充电时主要化学反应式为: 阴极( 还原反应) : PbSO4+ 2e= Pb+ SO42- 阳极( 氧化反应) : PbSO4+ 2H2O= PbO2+ 4H++ SO42- + 2e 充电时总反应为: PbSO4 + 2H2O = Pb + PbO2 + 2H2SO4 2,铅酸电池放电时主要化学反应为: 负极( 氧化反应) : Pb= Pb2+ + 2e 由于硫酸的存在, Pb2+立即生成难溶解的Pb-SO4。 正极( 还原反应) : PbO2+ 4H++ 2e= Pb2++2H2O 同样, 由于硫酸的存在, Pb2+ 也立即生成Pb-SO4。 放电时的总的反应为: Pb+ PbO2 + 2H2SO4 =2PbSO4+ 2H2O 二:铅酸电池模型的建立

在相同的充、放电模式下,单体电池间一致性的评价包括对电池的工作电压变化的一致性、电压内阻变化的一致性、电池容量变化一致性等三方面的内容。电池的端电压是一个与电池所处的环境温度和电荷荷电状态相关的函数,确定它们之间的关系,是确定电池电动势方程的关键。但是从电化学的角度来推导出其电动势和内阻的方程,是一件比较困难的事情,只能寻求另外的角度来解决这个问题。 三:蓄电池充放电是的变化曲线 蓄电池放电时,电压变化曲线不同放电时蓄电池端电压变化曲线 一额定功率放电的小时数放点小时数 不同充电率时蓄电池端电压变化充电时端电压变化曲线

单片机串口发送数据帧_0

单片机串口发送数据帧 很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu 首先定义一个数据帧的结构体,该结构体可以做为一个全局变量,所有的发送都要经过这个结构体: //结构体 struct { char busy_falg;//忙标志,若在发送数据时置位1,即在开始发送置位1,发送结束置位0 int index;//索引,指向需要发送数组的位置 int length;//整个数据帧的长度 char *buf;//指向需要发送的数据帧,建议为全局变量,否则一旦开始发送,必须等到发送结束,即判断busy_falg 为0 } send_buf; 发送数据的函数,这里有个缺点,就是还是要使用while 来检测串口是否忙碌,不过这样比占用系统时间来发送要好的多了:

//发送一帧 void SendBuf(char *buf,int length) { while(busy_falg);//查询发送是否忙,否则循环等待 send_buf.length = length; send_buf.index = 0; send_buf.buf = buf; send_buf.busy_falg = 1; SBUF = send_buf.buf[0];//写入SBUF,开始发送,后面就自动进入中断发送 } 串口中断发送函数,注意设置空闲标志位,避免多任务时多个发送帧调用了同一个结构体: void SerialInt() interrupt 4 //串口中断 { if(RI == 1)//串口接收 { RI = 0; } else if(TI == 1)//串口发送 { TI = 0;

基于MATLAB的图像处理字母识别

数字图像处理 报告名称:字母识别 学院:信息工程与自动化学院专业:物联网工程 学号:201310410149 学生姓名:廖成武 指导教师:王剑 日期:2015年12月28日 教务处制

目录 字母识别 1.---------------------测试图像预处理及连通区域提取 2.---------------------样本库的建立采集feature 3.---------------------选择算法输入测试图像进行测试 4.---------------------总结

字母识别 1.imgPreProcess(联通区域提取)目录下 conn.m:连通区域提取分割(在原图的基础上进行了膨胀、腐蚀、膨胀的操作使截取的图像更加接近字母) %%提取数字的边界,生成新的图 clear; clc; f=imread('5.jpg'); f=imadjust(f,[0 1],[1 0]); SE=strel('square',5); %%膨胀、腐蚀、膨胀 A2=imdilate(f,SE); SE=strel('disk',3) f=imerode(A2,SE) SE=strel('square',3); f=imdilate(f,SE); gray_level=graythresh(f); f=im2bw(f,gray_level); [l,n]=bwlabel(f,8) %%8连接的连接分量标注 imshow(f) hold on for k=1:n %%分割字符子句 [r,c]=find(l==k); rbar=mean(r); cbar=mean(c); plot(cbar,rbar,'Marker','o','MarkerEdgeColor','g','MarkerFaceColor',' y','MarkerSize',10); % plot(cbar,rbar,'Marker','*','MarkerEdgecolor','w'); row=max(r)-min(r) col=max(c)-min(c) for i=1:row for j=1:col seg(i,j)=1; end

基于matlab的人脸识别算法(PCA)

3.基于matlab的人脸识别算法 3.1 问题描述 对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量,如一幅 N*N 象素的图像可以视为长度为N2 的矢量,这样就认为这幅图像是位于N2 维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。因此,本次试题采用PCA算法并利用GUI实现。 对同一个体进行多项观察时,必定涉及多个随机变量X1,X2,…,Xp,它们都是的相关性, 一时难以综合。这时就需要借助主成分分析来概括诸多信息的主要方面。我们希望有一个或几个较好的综合指标来概括信息,而且希望综合指标互相独立地各代表某一方面的性质。 任何一个度量指标的好坏除了可靠、真实之外,还必须能充分反映个体间的变异。如果有一项指标,不同个体的取值都大同小异,那么该指标不能用来区分不同的个体。由这一点来看,一项指标在个体间的变异越大越好。因此我们把“变异大”作为“好”的标准来寻求综合指标。3.1.1 主成分的一般定义 设有随机变量X1,X2,…,Xp,其样本均数记为,,…,,样本标准差记为S1,S2,…,Sp。首先作标准化变换,我们有如下的定义: (1) 若C1=a11x1+a12x2+ … +a1pxp,…,且使 Var(C1)最大,则称C1为第一主成分; (2) 若C2=a21x1+a22x2+…+a2pxp,…,(a21,a22,…,a2p)垂直于(a11,a12,…,a1p),且使Var(C2)最大,则称C2为第二主成分; (3) 类似地,可有第三、四、五…主成分,至多有p个。 3.1.2 主成分的性质 主成分C1,C2,…,Cp具有如下几个性质: (1) 主成分间互不相关,即对任意i和j,Ci 和Cj的相关系数 Corr(Ci,Cj)=0 i j (2) 组合系数(ai1,ai2,…,aip)构成的向量为单位向量, (3) 各主成分的方差是依次递减的,即 Var(C1)≥Var(C2)≥…≥Var(Cp)

串口通讯-单片机向电脑发送数据

#include unsigned char data1[]={"have a nice day!"}; //这是要发送的数据,它将 //显示在电脑的串口调试助手上 bit sent_over; //定义一个本次字符是否已经发送完毕的标志位 void serial_timer1_init() //串口及定时器1的初始化函数 { SCON=0x40; //串口工作方式1,只发送不接收数据 PCON=0x00; //不倍增 ES=1; //开串口中断 EA=1; //开总中断 TMOD=0x20; //定时器工作方式2,8位自动重装 TH1=0xfd; //初值为0xfd,波特率9600 TL1=0xfd; TR1=1; //开定时器1 } void serial_ISR() interrupt 4 //串口中断服务例程,每发送完一个字符 { //就会中断一次 TI=0; //TI=0,为下一次发送字符数据作准备 sent_over=1; //本次字符已经发送完毕,标志位置1 } //使下一次发送字符能够进行 void main() { serial_timer1_init(); sent_over=1; //置为1,使第一次发送字符能够进行 while(1) { static unsigned char i=0; //定义一个静态局部变量,便于在data1中取出字符 if(sent_over==1) //如果为1,说明本次字符已经发送完毕,可以进行 { //下个字符发送了 SBUF=data1[i]; //发送字符 sent_over=0; //清0,等字符发送完毕,在中断里再重新置1 if(data1[i]!='\0') //如果整个字符数组还没发送完,就继续发送 i++; else while(1); //如果整个字符数组发送完了,就使单片机停下来} } }

基于MATLAB的人脸识别

基于MATLAB的人脸识别

————————————————————————————————作者: ————————————————————————————————日期:

图像识别 题目:基于MATLAB的人脸识别 院系:计算机科学与应用系 班级: 姓名: 学号: 日期:

设计题目基于MATLAB的人脸识别设 计技术参数 测试数据库图片10张训练数据库图片20张图片大小1024×768 特征向量提取阈值 1 设计要求综合运用本课程的理论知识,并利用MATLAB作为工具实现对人脸图片的预处理,运用PCA算法进行人脸特征提取,进而进行人脸匹配识别。 工作量 两周的课程设计时间,完成一份课程设计报告书,包括设计的任务书、基本原理、设计思路与设计的基本思想、设计体会以及相关的程序代码; 熟练掌握Matlab的使用。 工作计划第1-2天按要求查阅相关资料文献,确定人脸识别的总体设计思路; 第3-4天分析设计题目,理解人脸识别的原理同时寻求相关的实现算法;第5-8天编写程序代码,创建图片数据库,运用PCA算法进行特征提取并编写特征脸,上机进行调试; 第9-12天编写人脸识别程序,实现总体功能; 第13-14天整理思路,书写课程设计报告书。 参考资料1 黄文梅,熊佳林,杨勇编著.信号分析与处理——MATALB语言及应用.国防科技大学出版社,2000 2 钱同惠编著.数字信号处理.北京:机械工业出版社,2004 3 姚天任,江太辉编著.数字信号处理.第2版.武汉:武汉理工大学出版社,2000 4 谢平,林洪彬,王娜.信号处理原理及应用.机械工业出版社,2004 5刘敏,魏玲.Matlab.通信仿真与应用.国防工业出版社,2005 6 楼顺天.基于Matlab7.x 的系统分析与设计.西安电子科技大学,2002 7孙洪.数字信号处理.电子工业出版社,2001 目录 引言?错误!未定义书签。 1 人脸识别技术?错误!未定义书签。 1.1人脸识别的研究内容?错误!未定义书签。 1.1.1人脸检测(Face Detection)........... 错误!未定义书签。

Matlab7操作大全

A a abs绝对值、模、字符的ASCII码值acos反余弦 acosh反双曲余弦 acot反余切 acoth反双曲余切 acsc反余割 acsch反双曲余割 align启动图形对象几何位置排列工具all所有元素非零为真 angle相角 ans表达式计算结果的缺省变量名any所有元素非全零为真 area面域图 argnames函数M文件宗量名 asec反正割 asech反双曲正割 asin反正弦 asinh反双曲正弦 assignin向变量赋值 atan反正切 atan2四象限反正切 atanh反双曲正切 autumn红黄调秋色图阵 axes创建轴对象的低层指令 axis控制轴刻度和风格的高层指令 B b bar二维直方图 bar3三维直方图 bar3h三维水平直方图 barh二维水平直方图 base2dec X进制转换为十进制 bin2dec二进制转换为十进制blanks创建空格串 bone蓝色调黑白色图阵 box框状坐标轴 break while或for环中断指令brighten亮度控制 C c

capture(3版以前)捕获当前图形 cart2pol直角坐标变为极或柱坐标 cart2sph直角坐标变为球坐标 cat串接成高维数组 caxis色标尺刻度 cd指定当前目录 cdedit启动用户菜单、控件回调函数设计工具cdf2rdf复数特征值对角阵转为实数块对角阵ceil向正无穷取整 cell创建元胞数组 cell2struct元胞数组转换为构架数组 celldisp显示元胞数组内容 cellplot元胞数组内部结构图示 char把数值、符号、内联类转换为字符对象chi2cdf分布累计概率函数 chi2inv分布逆累计概率函数 chi2pdf分布概率密度函数 chi2rnd分布随机数发生器 chol Cholesky分解 clabel等位线标识 cla清除当前轴 class获知对象类别或创建对象 clc清除指令窗 clear清除内存变量和函数 clf清除图对象 clock时钟 colorcube三浓淡多彩交叉色图矩阵 colordef设置色彩缺省值 colormap色图 colspace列空间的基 close关闭指定窗口 colperm列排序置换向量 comet彗星状轨迹图 comet3三维彗星轨迹图 compass射线图 compose求复合函数 cond(逆)条件数 condeig计算特征值、特征向量同时给出条件数condest范-1条件数估计 conj复数共轭 contour等位线 contourf填色等位线 contour3三维等位线

stm32,DMA采集一个AD数据,并通过DMA向串口发送

#include #include "ADC1.h" #include "DMA1.h" #include "USART1.h" #include "time.h" #include "stdio.h" extern uint32_t SendBuff; float ADC_Received; uint32_t ADC_Received1; uint8_t ADC_Received2[11]; //printf函数重新定向,方便在程序中使用 int fputc(int ch, FILE *f) { USART_SendData(USART1, (unsigned char) ch); while (!(USART1->SR & USART_FLAG_TXE)); return (ch); } void usart_putchar(uint8_t ch) { USART_SendData(USART1,ch); while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); } int main() { ADC1_Config(); DMA_Config(); USART1_Config(); while(1) { // ADC_Received = (float)ADC_GetConversionV alue(ADC1)*3.3/4069; // ADC_Received1 = ADC_Received * 1000000000; ADC_Received = (float)SendBuff*3.3/4069; ADC_Received1 = ADC_Received * 1000000000; ADC_Received2[0]=(ADC_Received1/1000000000 + 0x30); //usart_putchar(0x2e);

基于matlab数字图像处理与识别系统含程序

目录 第一章绪论 (2) 1.1 研究背景 (2) 1.2 人脸图像识别的应用前景 (3) 1.3 本文研究的问题 (4) 1.4 识别系统构成 (4) 1.5 论文的内容及组织 (5) 第二章图像处理的Matlab实现 (6) 2.1 Matlab简介 (6) 2.2 数字图像处理及过程 (6) 2.2.1图像处理的基本操作 (6) 2.2.2图像类型的转换 (7) 2.2.3图像增强 (7) 2.2.4边缘检测 (8) 2.3图像处理功能的Matlab实现实例 (8) 2.4 本章小结 (11) 第三章人脸图像识别计算机系统 (11) 3.1 引言 (11) 3.2系统基本机构 (12) 3.3 人脸检测定位算法 (13) 3.4 人脸图像的预处理 (18) 3.4.1 仿真系统中实现的人脸图像预处理方法 (19) 第四章基于直方图的人脸识别实现 (21) 4.1识别理论 (21) 4.2 人脸识别的matlab实现 (21) 4.3 本章小结 (22) 第五章总结 (22) 致谢 (23) 参考文献 (24) 附录 (25)

第一章绪论 本章提出了本文的研究背景及应用前景。首先阐述了人脸图像识别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自动人脸识别系统的一般框架构成;最后简要地介绍了本文的主要工作和章节结构。 1.1 研究背景 自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除了它的重大理论价值外,也极具实用价值。 在进行人工智能的研究中,人们一直想做的事情就是让机器具有像人类一样的思考能力,以及识别事物、处理事物的能力,因此从解剖学、心理学、行为感知学等各个角度来探求人类的思维机制、以及感知事物、处理事物的机制,并努力将这些机制用于实践,如各种智能机器人的研制。人脸图像的机器识别研究就是在这种背景下兴起的,因为人们发现许多对于人类而言可以轻易做到的事情,而让机器来实现却很难,如人脸图像的识别,语音识别,自然语言理解等。如果能够开发出具有像人类一样的机器识别机制,就能够逐步地了解人类是如何存储信息,并进行处理的,从而最终了解人类的思维机制。 同时,进行人脸图像识别研究也具有很大的使用价依。如同人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。现在己有实用的计算机自动指纹识别系统面世,并在安检等部门得到应用,但还没有通用成熟的人脸自动识别系统出现。人脸图像的自动识别系统较之指纹识别系统、DNA鉴定等更具方便性,因为它取样方便,可以不接触目标就进行识别,从而开发研究的实际意义更大。并且与指纹图像不同的是,人脸图像受很多因素的干扰:人脸表情的多样性;以及外在的成像过程中的光照,图像尺寸,旋转,姿势变化等。使得同一个人,

matlab心得及学习方法(不断更新)

竭诚为您提供优质文档/双击可除matlab心得及学习方法(不断更新) 篇一:matlab心得及学习方法 matlab心得及学习方法(不断更新) 发现现在很多人(找工作的或者读博的)都想要学习或者正在学习matlab,问我要怎么学习。其实我虽然写matlab 代码的经验还算丰富,但是还不能说是一个很好的matlab 编程人员,这里有一些心得,分享给大家希望对大家有所帮助。 关于如何学习matlab 我的学习方法很简单:matlab是练出来的,而不是看出来的。很多人问我有没有比较好的matlab教材,我说随便 找一本吧,都可以。只要书里面有最基本的语法和命令,对于一个有编程基础的人,matlab可以在一个下午的时间内学会。当然,仅仅是学会。如果想要对matlab比较得心应手,那么最好的办法就是练习。练习的素材很多,比如对于学经济学的,可以做一些simulation之类的,也可以试着把计 量或者宏观教材里面的一些算法写写出来。一开始可能很慢,

但是当你完成了一个比较大的project的时候,你的matlab 的功力将会有巨大的提升。 当然,在你写程序之前,多读一些别人写的好的code 是非常有帮助的。 一些matlab的经验 1、适当了解一些数值计算、数值分析以及最优化的理论 用matlab的无非是做数值计算或者最优化,这也是matlab的强项,matlab有足够多的工具箱解决这些问题。但是在使用这些工具箱之前,应该首先了解一些数值计算以及最优化的理论。这一点在程序碰到问题或者计算结果不理想的时候尤为重要。很多时候结果不理想并不是自己的理论出了问题,而是盲目或者错误使用matlab的工具箱而导致的。比如我曾经做过一个单纯形法的优化程序,但是结果总是不理想,这个时候就要返回到单纯形法具体是一种什么样的算法来考虑这个问题,最后发现是由于目标函数的某一部分十分平缓导致的。当然更重要的是如果你不理解理论,很多问题根本不知道如何处理。有个学化学同学就曾问我一个程序怎么写,说matlab肯定可以完成的。了解清楚之后才明白原来他想做的就是一个受限最小二乘。但是他不懂得什么是最小二乘(因为没怎么学过数学),当然面对这个问题无从下手。

使用串口UART0接收上位机发送的数据

/****************************************Copyright (c)************************************************** ** Guangzou ZLG-MCU Development Co.,LTD. ** graduate school ** https://www.wendangku.net/doc/5b15698858.html, ** **--------------File Info------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2004-09-16 ** Last Version: 1.0 ** Descriptions: The main() function example template ** **------------------------------------------------------------------------------------------------------ ** Created by: Chenmingji ** Created date: 2004-09-16 ** Version: 1.0 ** Descriptions: The original version ** **------------------------------------------------------------------------------------------------------ ** Modified by: ** Modified date: ** Version: ** Descriptions: ** ***************************************************************** ***************************************/ /**************************************************************** ************ * 文件名:main.C * 功能:使用串口UART0接收上位机发送的数据,并将数据原封不动地发送回上位机。 * 说明:通讯波特率115200,8位数据位,1位停止位,无奇偶校验。 ***************************************************************** ***********/

Matlab在解析几何中的应用

Matlan软件在解析几何中的应用 (作者:李世兴宁夏北方民族大学750021 ) 摘要:在解析几何教学和学习过程中,有些复杂的几何图形是无法用简单的工具画出的,动点轨迹问题的教学和学习由传统教学手段也是无法实现的,而Matlab软件具有强大的图形设计功能,正好弥补了传统教学和学习的不足,利用Matlab语言编程制出空间几何图形,有利于直观形象地判定空间图形的相关位置,也有利于观察动点轨迹的形成。这样的教学和学习方式不仅可以取得良好的教学效果,还能提高学生的学习兴趣。 关键词: MATLAB;解析几何;教学和学习; 一.引言: 解析几何是我们数学专业几何学课程体系的基础,它是中学数学课程中几何学的延伸和推广。既然是几何顾名思义这门学科要求学生有一定的空间想象能力和空间构图能力。但是,目前的大多数学校在解析几何的教学中的方法还是比较陈旧没有随着计算机技术的发展而即使更新,教学手段比较落后,就例举解析几何中曲线及曲面的形成过程与变换过程而言,只通过传统的教师讲授、静态图示表示出来,一方面不够生动,另一方面也不够准确,这些都是目前解析几何教学中的不足。而这样的不足用MATLAB就可以很好的解决。在几何教学中应用MATLAB可以把曲线、曲面准确地模拟出来,对教学效率提高和学生的空间想象能力的培养都有事半功倍的作用。而且应用MATLAB的绘图功能,就可以美观又准确绘制图形而且许多老师在黑板上难以画出来的复杂图形对MATLAN来说都不是问题。其次MATLAB 绘图函数都不是非常复杂的函数,例如:绘线的函数Plot()、描点的函数catter()、绘线的函数plot3()、绘制网面图的函数surf()等。 1.解析几何中的线关系相对于后面的空间曲面比较简单,比如直线的平行,相交,垂直, 异位都是中学阶段的知识。下面我们用MATLAB演示一个相对复杂的空间曲线; 程序:ezplot3('3*t*cos(t)','3*t*sin(t)','t^1/3',[0,60]);

单片机串口通信的发送与接收

51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位TI 置1,同样,当收到了数据后,也会在RI 置1。 无论RI 或TI 出现了1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。 看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用“中断方式”,这是正确合理的。 即:每当收到一个新数据,就在中断函数中,把RI 清零,并用一个变量,通知主函数,收到了新数据。 发送数据时,很多的程序都是使用的“查询方式”,就是执行while(TI ==0); 这样的语句来等待发送完毕。 这时,处理不好的话,就可能带来问题。 看了一些网友编写的程序,发现有如下几条容易出错: 1.有人在发送数据之前,先关闭了串口中断!等待发送完毕后,再打开串口中断。 这样,在发送数据的等待期间内,如果收到了数据,将不能进入中断函数,也就不会保存的这个新收到的数据。 这种处理方法,就会遗漏收到的数据。 2.有人在发送数据之前,并没有关闭串口中断,当TI = 1 时,是可以进入中断程序的。但是,却在中断函数中,将TI 清零! 这样,在主函数中的while(TI ==0);,将永远等不到发送结束的标志。 3.还有人在中断程序中,并没有区分中断的来源,反而让发送引起的中断,执行了接收中断的程序。 对此,做而论道发表自己常用的方法: 接收数据时,使用“中断方式”,清除RI 后,用一个变量通知主函数,收到新数据。 发送数据时,也用“中断方式”,清除TI 后,用另一个变量通知主函数,数据发送完毕。 这样一来,收、发两者基本一致,编写程序也很规范、易懂。 更重要的是,主函数中,不用在那儿死等发送完毕,可以有更多的时间查看其它的标志。 实例: 求一个PC与单片机串口通信的程序,要求如下: 1、如果在电脑上发送以$开始的字符串,则将整个字符串原样返回(字符串长度不是固定的)。 2、如果接收到1,则将P10置高电平,接收到0,P10置低电平。(用来控制一个LED)单片机是STC89C52RC/晶振11.0592/波特率要求是9600或4800。谢谢!

基于MATLAB数字图像处理杂草识别

基于MATLAB数字图像处理杂草识别

基于数字图像处理的杂草识别 班级:信息5班 组员:李辉李少杰李港深胡欣阳 学号:04141394 04141395 04141393 0414139 指导教师:蔡利梅 组员分工: 李辉:部分程序,查找资料 李少杰:实验报告,PPT,演讲 李港深:部分程序,实验报告 胡欣阳:部分程序,实验报告

摘要 杂草同农田作物争夺阳光和养分,严重影响了农作物的生长。为了达到除草的目的,人们开始喷洒大量的除草剂来进行除草。可是却忽略了除草剂的不当使用给人、畜以及环境造成的危害。本文从实际应用出发,设计了一个基于数字图像处理的杂草图像特征提取及识别设计方案。运行在参考了前人研究成果的基础上,不断将算法改进,找出适合于MATLAB杂草识别的可行性方法。本文对杂草图像的处理和识别方法进行研究。采集来的图像经常会有模糊现象的发生,对模糊图像的恢复处理做了大量的研究试验,得出维纳滤波具有较好的恢复效果;绿色植物和土壤背景的分割试验中,提出了一种基于彩色图像的二值化方法,可以不经过彩色图像灰度化就能够直接把绿色植物与土壤背景分割开,和以往的分割方法相比处理速度快,分割效果好,更加满足实时性;杂草和作物的分割主要研究了行间杂草和作物的分割,参考国内外资料,并进行研究试验,表明运用位置特征识别法有很好的分割效果,寻找作物中心行采用了简单快速的像素位置直方图法,采用了区域生长,和其他方法相比减少了重复操作,节省了时间,满足实时处理的要求;分割后的图像为只含有杂草的二值图像,通常会有一些残余的叶片和颗粒的噪声,通过形态学滤波或中值滤波去除噪声。 1、研究目的及意义 杂草是生态系统中的一员,农田杂草是农业生态系统中的

红外接收并通过串口发送数据至电脑

/** ************************************************************************* * [url=home.php?mod=space&uid=288409]@file[/url] main.c * [url=home.php?mod=space&uid=187600]@author[/url] xr * [url=home.php?mod=space&uid=212281]@date[/url] 2014年3月31日22:30:08 * [url=home.php?mod=space&uid=895143]@version[/url] V1.2.3 * [url=home.php?mod=space&uid=247401]@brief[/url] 串口通信+红外通信通过串口发送红外遥控器的解码值到PC * [url=home.php?mod=space&uid=536309]@NOTE[/url] 单片机STC89C52RC MCU 晶振11.0592MHZ ************************************************************************* */ #include void ConfigUart(); void UartSend(unsigned char dat); void delayms(unsigned int xms); extern bit irflag; extern unsigned char ircode[4]; extern void ConfigInfrared(); void main() { ConfigUart(); ConfigInfrared(); while (1) { if (irflag) //接收到红外数据 { irflag = 0; UartSend(ircode[0]); //发送用户码 delayms(100);//延时100ms UartSend(ircode[2]); //发送键码 } } } /** * @brief 延时xms * @param xms * @retval 无 */

基于matlab的形状识别

1、设计目的 基于Maltab或者C语言对图像进行识别。编写摄像头采集图像程序,对采集的图像进行预处理,如图像增强、图像分割等处理,对于处理的图像进行特征提取,根据特征进行模式识别,如对三角形、正方形与圆形的识别。 2、设计正文 2.1设计分析 1)编写摄像头采集图像程序 2)对采集的图像进行预处理 3)对于处理的图像进行特征提取 4)进行模式识别,区分各种形状 2.2设计原理 2.2.1图像预处理 彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别

等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换。 2.2.2对于处理的图像进行特征值提取 二值图像是指整幅图像画面内仅黑、白二值的图像。在实际的车牌处理系统中,进行图像二值变换的关键是要确定合适的阀值,使得字符与背景能够分割开来,二值变换的结果图像必须要具备良好的保形性,不丢掉有用的形状信息,不会产生额外的空缺等等。车牌识别系统要求处理的速度高、成本低、信息量大,采用二值图像进行处理,能大大地提高处理效率。阈值处理的操作过程是先由用户指定或通过算法生成一个阈值,如果图像中某中像素的灰度值小于该阈值,则将该像素的灰度值设置为0或255,否则灰度值设置为255或0。 两个具有不同灰度值的相邻区域之间总存在边缘,边缘就是灰度值不连续的结果,是图像分割、纹理特征提取和形状特征提取等图像分析的基础。为了对有意义的边缘点进行分类,与这个点相联系的灰度级必须比在这一点的背景上变换更有效,我们通过门限方法来决定一个值是否有效。所以,如果一个点的二维一阶导数比指定的门限大,我们就定义图像中的次点是一个边缘点,一组这样的依据事先定好的连接准则相连的边缘点就定义为一条边缘。经过一阶的导数的边缘检测,所求的一阶导数高于某个阈

matlab习题

1.请登陆美国MathWorks 公司的网站(https://www.wendangku.net/doc/5b15698858.html,),查看看现在大概有多少本MATLAB-based books (以MATLAB 为基本软件,来说明各个专业领域的教科书或工具书)。哪一个领域的MATLAB-based books 最多?中文书共有几本? 2.若有任何MATLAB/Simulink 技术上的问题,可以直接连到MathWorks 公司的技术支持部网站(https://www.wendangku.net/doc/5b15698858.html,/support) 寻求支持。请在技术支持部网站的搜寻引擎输入「Web Server」,看会传回多少和MATLAB Web Server 相关的信息。 3.请在MATLAB中直接输入下列常数,看它们的值是多少: a.i b.j c.eps d.inf e.nan f.pi g.realmax h.realmin 4.请使用lookfor 指令,找出具有下列功能的MATLAB 指令。(每一项只需找出一个相关度最高的MATLAB 指令。) a.找出矩阵的大小(即行维度和列维度) b.改变矩阵的大小(例如将4×6 的矩阵改成12×2) c.将矩阵左右翻转(Left-right flip) d.将矩阵上下翻转(Up-down flip) e.找出矩阵每一列的最大值 f.对矩阵的每一列进行排序 g.矩阵的旋转(Rotate) h.逆矩阵(Inverse matrix)的计算 i.求矩阵的秩(rank) j.计算矩阵的行阶梯矩阵reduced row echelon form

k.计算矩阵的特征值(Eigenvalues)与特征向量(Eigenvectors) l.直角坐标转成极坐标 m.极坐标转成直角坐标 5.写一个MATLAB 小程序findN01.m,求出最小的n 值,使得n! > realmax。请问n 的值是多少?此时(n-1)! 的值又是多少? 6.MATLAB 的sqrt 指令可对任一数值进行开平方的运算。用此指令求出下列各数的平方根,并验算之: a. b.2*i c.-5+12*i 其中i 是单位虚数。 7.写一个MATLAB 函数myFun.m 来计算下列方程式: y = 0.5*exp(x/3)-x*x*sin(x) 其中x 是函数的输入,y 是函数的输出。你的函数必须能够处理当x 是标量或是向量的两种情况。此外,请利用下述两列程序代码来画出此函数的图形: x=0:0.1:10; plot(x, myFun(x)); 8.写一个MATLAB 函数piFun.m 来计算下列级数: f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...) 其中n 为函数的输入,代表上述级数的项数,级数和f(n) 则是函数的输出。 9.使用tic 和toc 指令来测量piFun(100000) 的计算时间。请说明你的计算机规格以及其计算时间。 10.请写一个函数minxy.m,其功能是由一个二维矩阵中找出小元素,用法如下: [minValue, minIndex] = minxy(matrix)

相关文档