Random Corner Patches
1 次查看(过去 30 天)
显示 更早的评论
Hello,
Has anyone got any ideas on how to create random image corner features. eg a random curved edge with one side consisting of larger magnitude than the other side. I wish to be able to generate random corners patches automatically such as those found in real images as would be extracted by a corner detector such as Harris.
An example of a patch is here
http://mi.eng.cam.ac.uk/~twd20/Research/fast-corner.jpg
Thanks for any ideas
Mike
0 个评论
回答(2 个)
Brett Shoelson
2011-2-14
Harris corner detection is the default for the Image Processing Toolbox function corner. It's also available as a block in the Video and Image Processing Blockset (or as a System Object!).
Cheers,
Brett
0 个评论
David Young
2011-2-14
It depends on how you plan to use the random corners, and what statistics or other properties you want them to have.
If you want to get a set of patches with the sort of corners that the Harris detector would find, how about just taking a load of natural images, putting them through a corner detector, and pulling out a patch round each corner? You could extend the set further by randomly rotating and scaling each patch.
Alternatively, if you want truly synthetic patches, with control over the statistics and a generative model, perhaps something along the following lines might be useful.
% Generate a random texture by smoothing random noise
r = rand(400,400)-0.5;
sigma1 = 10;
g = fspecial('gauss', 2*round(2.5*sigma1)+1, sigma1);
s = filter2(g, r, 'valid');
% Make it more "edgy" by thresholding, and then smoothing a little
sigma2 = 4;
g = fspecial('gauss', 2*round(2.5*sigma2)+1, sigma2);
im = filter2(g, double(s > 0), 'valid');
% Find the corners and plot them
c = corner(im);
imshow(im, []);
hold on;
plot(c(:, 1), c(:, 2), 'r*');
hold off;
Whether you're using natural images or somthing like my synthetic texture, you can pull out cornery patches like this:
% Grab a typical corner-centred patch
half_patchsize = 10;
random_patch_no = ceil(rand * size(c,1));
xc = c(random_patch_no, 1);
yc = c(random_patch_no, 2);
patch = im(yc-half_patchsize:yc+half_patchsize, ...
xc-half_patchsize:xc+half_patchsize);
imshow(patch, []);
Put comments on this answer if you'd like to discuss it.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Processing and Computer Vision 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!