matlab是什么东东啊?

一、matlab是什么东东啊?

一个用于数值计算的计算软件 用c写算法的。计算功能相当强大。

二、matlab repmat怎么用

pcacov 功能:运用协方差矩阵进行主成分分析 格式:PC=pcacov(X) [PC,latent,explained]=pcacov(X) 说明:[PC,latent,explained]=pcacov(X)通过协方差矩阵X进行主成分分析,返回主成分(PC)、协方差矩阵X的特征值(latent)和每个特征向量表征在观测量总方差中所占的百分数(explained)。 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵

三、MATLAB问题求救

[H,theta,rho] = hough(w);

imshow(H,[],'XData',theta,'YData',rho,...

'InitialMagnification','fit');

xlabel('\theta'), ylabel('\rho');

axis on, axis normal, hold on;

P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));

x = theta(P(:,2));

y = rho(P(:,1));

plot(x,y,'s','color','white');

lines = houghlines(w,theta,rho,P,'FillGap',10,'MinLength',50);

figure,imshow(w);

hold on

Hough变换对圆的检测

Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线。

圆的方程为:(x-a)*(x-a)+(y-b)*(y-b)=r*r ,通过Hough变换,将图像空间(x,y)对应到(a,b,r)参数空间 。

Hough对圆的检测程序如下:

function [hough_space,hough_circle,para] = hough_circle(BW,step_r,step_angle,r_min,r_max,p)

% %%%%%%%%%%%%%%%%%%%%%%%%%%

% input

% BW:二值图像;

% step_r:检测的圆半径步长

% step_angle:角度步长,单位为弧度

% r_min:最小圆半径

% r_max:最大圆半径

% p:以p*hough_space的最大值为阈值,p取0,1之间的数

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% output

% hough_space:参数空间,h(a,b,r)表示圆心在(a,b)半径为r的圆上的点数

% hough_circl:二值图像,检测到的圆

% para:检测到的圆的圆心、半径

[m,n] = size(BW);

size_r = round((r_max-r_min)/step_r)+1;

size_angle = round(2*pi/step_angle);

hough_space = zeros(m,n,size_r);

[rows,cols] = find(BW);

ecount = size(rows);

% Hough变换

% 将图像空间(x,y)对应到参数空间(a,b,r)

% a = x-r*cos(angle)

% b = y-r*sin(angle)

for i=1:ecount

for r=1:size_r

for k=1:size_angle

a = round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));

b = round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));

if(a>0&a<=m&b>0&b<=n)

hough_space(a,b,r) = hough_space(a,b,r)+1;

end

end

end

end

% 搜索超过阈值的聚集点

max_para = max(max(max(hough_space)));

index = find(hough_space>=max_para*p);

length = size(index);

hough_circle=zeros(m,n);

for i=1:ecount

for k=1:length

par3 = floor(index(k)/(m*n))+1;

par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;

par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;

if((rows(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&...

(rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)

hough_circle(rows(i),cols(i)) = 1;

end

end

end

% 打印结果

for k=1:length

par3 = floor(index(k)/(m*n))+1;

par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;

par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;

par3 = r_min+(par3-1)*step_r;

fprintf(1,'Center %d %d radius %d\n',par1,par2,par3);

para(:,k) = [par1,par2,par3];

end

运行如下程序:

clc,clear all

I = imread('2.bmp');

[m,n,l] = size(I);

if l>1

I = rgb2gray(I);

end

BW = edge(I,'sobel');

step_r = 1;

step_angle = 0.1;

minr = 20;

maxr = 30;

thresh = 0.7;

[hough_space,hough_circle,para] = hough_circle(BW,step_r,step_angle,minr,maxr,thresh);

subplot(221),imshow(I),title('原图')

subplot(222),imshow(BW),title('边缘')

subplot(223),imshow(hough_circle),title('检测结果')

运行结果如下:

Center 60 27 radius 20

Center 61 27 radius 20

Center 62 27 radius 20

Center 63 27 radius 20