matlab 特征点提取。

2025-02-25 14:21:32
推荐回答(1个)
回答1:

新建个ff.m文件:

%% MATLAB R2013a
function feature = ff(im)
rot = @(t)[cos(t) -sin(t); sin(t) cos(t)];
im = ~im2bw(im);
Size = size(im);
CC = bwconncomp(im);

feature = zeros(CC.NumObjects, 1);
for i = 1:CC.NumObjects
    [x, y] = ind2sub(Size, CC.PixelIdxList{i});
    t = fminsearch(@(t)Loss([x y], t), 0);
    [~, width] = Loss([x y], t);
    feature(i) = width(1)/width(2);
end
feature = sort(feature, 1, 'descend');

function [Loss, width] = Loss(G, t)
    R = rot(t);
    G = G*R;
    width = max(G, [], 1) - min(G, [], 1);
    Loss = -width(1)/width(2);
end
end

主程序:

im = imread(图片名称);
feature = ff(im)

对于题目中的输入图片,得到的feature是:


分别对应四个区域的长宽比。