这里的一些工作。它只针对这个特定的图像进行调整,它可能不适用于其他图像。
使用gamma = 1.5
执行伽马校正。之所以会这样,是因为我想将图像右侧较亮的金币与左侧图像上的金币相匹配,以便更容易进行阈值和分割。
使用色相和饱和度通道来确定金币的阈值。
使用形态和任何漏洞填补的阈值的结果具有
删除小于12000个像素的区域的任何群众。
步骤#1
您可以imadjust
执行的灰度调节,并与gamma = 1.5
,您只需执行以下操作。我会从StackOverflow上直接做在图像中第一负载,则伽玛调整:
close all;
im = imread('http://i.stack.imgur.com/g4FCV.jpg');
im_enhance = imadjust(im, [], [], 1.5);
im
是原始图像和im_enhance
是增强的图像。我们得到如下增强图像:
有一点很难看,但如果你通过点击上面的图片放大自己的形象,你会看到金色的颜色在图像的右侧比以前稍暗。
步骤#2
首先将您的图像转换成HSV使用rgb2hsv
:
hsv = rgb2hsv(im2double(im_enhance));
后,我用impixelinfo
开放上面的图片做imshow(im_enhance)
和盘旋我的鼠标移到金币看色调和饱和度是多少。通过检查,我看到色相值大约为0.25或更低,饱和度值为0.25或更高,以区分金币和银币。因此,使用这些范围阈值,并得到一个二进制地图,告诉你什么是属于一个金币,什么不可行:
gold_coins = hsv(:,:,1) < 0.25 & hsv(:,:,2) > 0.25;
我们现在得到这个图片:
不完善。我们可以看到,大量的白色属于金币,而其中有洞的是银色。
第3步
我们要做的就是旁边填写任何孔,黄金的对象必须确保你得到的应该是黄金的所有领域。使用imfill
和'holes'
选项来执行此操作。
gold_coins_fill = imfill(gold_coins, 'holes');
现在,我们得到:
大,但我们再次银币来处理。金币非常好。
步骤#4
要删除属于银币,我删除有小于12000个像素的面具所有领域的任何群众。这是通过反复试验完成的。您可以使用功能bwareaopen
并指定12000作为第二个参数在该图像上可以这样做:
gold_coins_final = bwareaopen(gold_coins_fill, 12000);
现在,我们得到:
完整的代码,如果你只是想通过复制和粘贴来运行该图如下所示:
% Step #1
close all;
im = imread('http://i.stack.imgur.com/g4FCV.jpg');
im_enhance = imadjust(im, [], [], 1.5);
% Step #2
hsv = rgb2hsv(im2double(im_enhance));
gold_coins = hsv(:,:,1) < 0.25 & hsv(:,:,2) > 0.25;
% Step #3
gold_coins_fill = imfill(gold_coins, 'holes');
% Step #4
gold_coins_final = bwareaopen(gold_coins_fill, 12000);
imshow(gold_coins_final);
恩,你问这个问题的方式注意力过于宽泛,无法回答。相反,**描述你究竟遇到了什么问题。**。我认为这是第一步。你使用matlab将RGB转换为HSI图像数据的研究有哪些?你的谷歌/ stackoverflow研究的结果是什么你不明白? –
好的马库斯。我正在用matlab做硬币识别系统。这些是我国硬币的示例图片。我必须检查图片并计算图片中硬币的总价值。我的方法是1.增强图像,使颜色可见。 2.确定每枚硬币并剪下它们3.然后确定它们的颜色,并将它们分成两组颜色银色和金色。 4然后通过从每种颜色的颜色 –
中做出一个硬币来确定它们的价值,这些硬币对于我上面提出的问题没有任何解释:**您坚持到底在哪里?**这实际上没有免费代码编写服务,所以您有把你的问题简化成一个确切的问题,否则,我们无法帮助你。 –