
这三者主要面向的对象不一样吧,jetsonnano主要用于机器学习、人工智能等方面,树莓派主要用于计算机编程教育,比起前两者STM32的应用范围更广一些(也可能是前两者我不是很熟悉的缘故)。
STM32可以跑 *** 作系统,但是不能跑Linux,因为其属于Cortex-M系列不带MMU。另外,Cortex-A系列可以跑Linux,因为它带MMU。
图像处理方面、图像识别算法:掌握算法、简化算法、认清算法实质和算法最大复杂度所在;嵌入式CPU数据手册:掌握cpu特点和能力,如需特殊优化了解cpu内部cache和总线特点,特色指令集嵌入式 *** 作系统文档:了解系统能力、存储器使用、系统运行最大速度,程序调用特点(硬中断、软中断、函数),以便决定算法运行过程以及是否能够实现、处理能力如何
我把程序贴下面了,这个是Robert算子的程序。换做其他算子,你只要该其中的一个矩阵就行了。查到这几个算子,然后替换,我在程序中会标出的。
clc
close all
clear all
%%%生成高斯平滑滤波模板%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
hg=zeros(3,3); %设定高斯平滑滤波模板的大小为33
delta=05;
for x=1:1:3
for y=1:1:3
u=x-2;
v=y-2;
hg(x,y)=exp(-(u^2+v^2)/(2pidelta^2));
end
end
h=hg/sum(hg(:));
%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%读入图像%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
f = imread('1111tif'); % 读入图像文件
f=rgb2gray(im2double(f));
imshow(f)
title('原始图像');
[m,n]=size(f);
ftemp=zeros(m,n);
rowhigh=m-1;
colhigh=n-1;
%%%高斯滤波%%%
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
A=hmod;
ftemp(x,y)=sum(A(:));
end
end
f=ftemp
figure,imshow(f)
title('通过高斯滤波器后的图像');
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%利用roberts算子进行边缘检测%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sx=[-1 -2 -1;0 0 0;1 2 1];
sy=[-1 0 1;-2 0 2;-1 0 1];%%%%%你可以替换成其他算子,这里是罗伯特算子
% sx=[-1 -2 -1;0 0 0;1 2 1];
% sy=[-1 0 1;-2 0 2;-1 0 1];这个是Sobel算子,类似的,你可以替换成canny算子等等
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
fsx=sxmod;
fsy=symod;
ftemp(x,y)=sqrt((sum(fsx(:)))^2+(sum(fsy(:)))^2);
end
end
fr=im2uint8(ftemp);
figure,imshow(fr)
title('用roberts算子边缘检测的原始图像');
%%%域值分割%%%
TH1=60; %设定阈值
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
if (fr(x,y)>=TH1)&((fr(x,y-1) <= fr(x,y)) & (fr(x,y) > fr(x,y+1)) )
fr(x,y)=200;
elseif(fr(x,y)>=TH1)&( (fr(x-1,y) <=fr(x,y)) & (fr(x,y) >fr(x+1,y)))
fr(x,y)=200;
else fr(x,y)=50;
end
end
end
figure,imshow(fr)
title('用roberts算子边缘检测并细化后的图像');
你可以试试下面的程序:\x0d\I=imread('myphotojpg'); % 假设要处理的图像是myphotojpg\x0d\heights=size(I,1); % 图像的高\x0d\widths=size(I,2); % 图像的宽\x0d\m=8; % 假设纵向分成8幅图\x0d\n=10; % 假设横向分成10幅图\x0d\% 考虑到rows和cols不一定能被m和n整除,所以对行数和列数均分后要取整\x0d\rows=round(linspace(0,heights,m+1)); % 各子图像的起始和终止行标\x0d\cols=round(linspace(0,widths,n+1)); % 各子图像的起始和终止列标\x0d\blocks=cell(m,n); % 用一个单元数组容纳各个子图像\x0d\for k1=1:m\x0d\ for k2=1:n\x0d\ blocks{k1,k2}=I(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:);\x0d\ subimage=blocks{k1,k2};\x0d\ % 以下是对subimage进行边缘检测\x0d\ % 加入边缘检测的代码\x0d\ % 以上是对subimage进行边缘检测\x0d\ blocks{k1,k2}=subimage;\x0d\ end\x0d\end\x0d\processed=I; % processed为处理后的图像,用原图像对其初始化\x0d\% 以下为拼接图像\x0d\for k1=1:m\x0d\ for k2=1:n\x0d\ processed(rows(k1)+1:rows(k1+1),cols(k2)+1:cols(k2+1),:)=blocks{k1,k2};\x0d\ end\x0d\end\x0d\figure,imshow(processed)\x0d\% 以上的程序已测试过,对灰度图像和真彩图像都可以运行。
int main()
{
IplImage src;
src=cvLoadImage("D:\\image\\linejpg");
{
IplImage dst = cvCreateImage( cvGetSize(src), 8, 1 );
IplImage color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
CvMemStorage storage = cvCreateMemStorage(0);//存储检测到线段,当然可以是N1的矩阵数列,如果实际的直线数量多余N,那么最大可能数目的线段被返回
CvSeq lines = 0;
int i;
IplImage src1=cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,1);
cvCvtColor(src, src1, CV_BGR2GRAY); //把src转换成灰度图像保存在src1中,注意进行边缘检测一定要换成灰度图
cvCanny( src1, dst, 50, 200, 3 );//参数50,200的灰度变换
cvCvtColor( dst, color_dst, CV_GRAY2BGR );
lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 80, 30, 10 );
for( i = 0; i < lines->total; i++ )
{
CvPoint line = (CvPoint)cvGetSeqElem(lines,i);
cvLine( color_dst, line[0], line[1], CV_RGB(255,255,0), 3, 8 );
double k=(double)(line[1]y-line[0]y)/(double)(line[1]x-line[0]x);
double d=line[0]y-line[0]xk;
printf("This is the %d line, this line is y = %2f x + %2f \n",i+1,k,d);
}
cvNamedWindow( "Source", 1 );
cvShowImage( "Source", src );
cvNamedWindow( "Hough", 1 );
cvShowImage( "Hough", color_dst );
cvWaitKey(0);
}
}
这主要是为了便于处理,毕竟彩色图像就要分析3组原色的梯度,而灰度图像只要1组。
另外由于边缘检测基本是用梯度算子完成的,梯度是在坐标(x,y)处指向f最大变化率的方向的向量,而彩色图像实际是由若干种原色(如RGB)构成的,如果直接检测彩色图像边缘也就是对每种色彩单独检测,但是各原色在一点处的梯度方向可能不同,从而得到的边缘也不同,会发生错误。要采用计算平均向量可以解决该问题但复杂性提高。
在视觉助手当中。
与 C 和BASIC 一样,LabVIEW也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。
以上就是关于关于sobel算子的图像边缘检测程序_利用sobel算子进行边缘提取全部的内容,包括:关于sobel算子的图像边缘检测程序_利用sobel算子进行边缘提取、matlab图像分块,边缘检测,图像拼接代码_基于matlab的图像边缘检测、高分求!!图像边缘检测算子的MATLAB程序!发到邮箱232111605@qq.com!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)