MATLAB 图像识别

图片例
请添加图片描述
代码:

f=imread('D:\Users\41644\Downloads\jianbianseqiu-32753507_3.jpg');
f=f(:,:,3);
f=histeq(f,256);       %增强对比度
f=im2bw(f,0.386);
% rowhigh=102+276-1;     %提取有用部分
% colhigh=193+277-1;

f=f(102:rowhigh,193:colhigh);
se=strel('square',14); %开闭运算
fo=imopen(f,se);
f2=imclose(fo,se);
f2=~f2;
imshow(f2);

g=edge(f2,'sobel',0.47);
[B,L] = bwboundaries(f2,'noholes');
hold on
for k = 1:length(B)    % 标记边界
  boundary = B{k};
  plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2)
end

hold on              
[L1,n]=bwlabel(g);     %标定质心
ff=imread('D:\Users\41644\Downloads\jianbianseqiu-32753507_3.jpg');
for k=1:n
  [r,c]=find(L1==k);
  rbar=mean(r);
  cbar=mean(c);
  plot(cbar,rbar,'Marker','*','MarkerEdgeColor','blue');
  fprintf('行坐标为%9.2f    , ',cbar)
  fprintf('列坐标为%9.2f\n',rbar);
% rgb=ff(floor(cbar)+193,floor(rbar)+102,:)          %读取RGB值

end

axis on,axis normal;
[H,theta,rho]=hough(g);%判断直线
peak=houghpeaks(H,11);
lines=houghlines(g,theta,rho,peak,'FillGap',10,'MinLength',31);%
hold on
for k=1:length(lines)
  xy=[lines(k).point1;lines(k).point2];
  plot(xy(:,1),xy(:,2),'LineWidth',2.5,'Color','blue');
end

l=regionprops(L,'Perimeter','Area');  %求周长,面积
l.Perimeter   
l.Area

stats = regionprops(L,'Area','Centroid','Perimeter');
threshold = 0.95;
for k = 1:length(B)
  boundary = B{k};
  area = stats(k).Area;                
  %perimeter=stats(k).Perimeter;
  delta_sq = diff(boundary).^2;    
  perimeter = sum(sqrt(sum(delta_sq,2)));                 %利用4pi*面积/周长^2=1判断圆
  metric = 4*pi*area/perimeter^2;
  metric_string = sprintf('%2.2f',metric) ;
  text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','g',...
       'FontSize',14,'FontWeight','bold');
  if metric > threshold
     centroid = stats(k).Centroid;
     text(centroid(1)-10,centroid(2)-10,'圆','Color','b','FontSize',10,'FontWeight','bold');
  end

end

只处理部分图片的数据

行坐标为    46.42    , 列坐标为   131.72
行坐标为    45.27    , 列坐标为   217.00
行坐标为    45.48    , 列坐标为    47.10
行坐标为   128.99    , 列坐标为    90.71
行坐标为   129.60    , 列坐标为   219.28
行坐标为   223.10    , 列坐标为    49.89
行坐标为   223.50    , 列坐标为   131.68
行坐标为   221.19    , 列坐标为   219.15
行坐标为   275.34    , 列坐标为   133.53
行坐标为   275.21    , 列坐标为   215.57
行坐标为   277.00    , 列坐标为    46.50

请添加图片描述

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的图像识别MATLAB代码示例,使用了深度学习工具箱中的卷积神经网络(CNN): 1. 加载图像数据集 ```matlab imds = imageDatastore('imagefolder', 'IncludeSubfolders', true, 'LabelSource', 'foldernames'); ``` 其中,'imagefolder' 是包含图像的文件夹的路径。 2. 将数据集分为训练集和测试集 ```matlab [imdsTrain, imdsTest] = splitEachLabel(imds, 0.7, 'randomized'); ``` 这里将数据集分为70%的训练集和30%的测试集。 3. 定义卷积神经网络 ```matlab layers = [ imageInputLayer([32 32 3]) convolution2dLayer(3, 16, 'Padding', 'same') batchNormalizationLayer reluLayer maxPooling2dLayer(2, 'Stride', 2) convolution2dLayer(3, 32, 'Padding', 'same') batchNormalizationLayer reluLayer maxPooling2dLayer(2, 'Stride', 2) convolution2dLayer(3, 64, 'Padding', 'same') batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer]; ``` 这里定义了一个包含3个卷积层和2个池化层的卷积神经网络,最后输出10个类别的概率。 4. 设置训练选项 ```matlab options = trainingOptions('sgdm', 'InitialLearnRate', 0.01, 'MaxEpochs', 20, 'MiniBatchSize', 128, 'Shuffle', 'every-epoch', 'ValidationData', imdsTest, 'ValidationFrequency', 50, 'Verbose', false, 'Plots', 'training-progress'); ``` 这里使用随机梯度下降(SGD)作为优化算法,设置了学习率、最大迭代次数、批量大小、数据随机打乱等训练选项。 5. 训练卷积神经网络 ```matlab net = trainNetwork(imdsTrain, layers, options); ``` 6. 测试图像识别准确率 ```matlab YPred = classify(net, imdsTest); YTest = imdsTest.Labels; accuracy = sum(YPred == YTest)/numel(YTest); ``` 这里使用测试集测试了训练好的卷积神经网络的准确率。 以上是一个简单的图像识别MATLAB代码示例,你可以根据自己的需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值