颜色阈值将RGB转换为二进制考虑红、绿和bue的值

6次浏览(过去30天)
izyan hanum
izyan hanum 2015年3月16日
评论道: izyan hanum2015年3月17日
如何将此RGB转换为灰度和二进制,考虑红、绿和蓝的值。有人能帮帮我吗?因为我的编码有一些错误:(我只是将图像转换为灰度和二进制,没有考虑rgb的值,我不知道如何考虑rgb的值

接受的答案

图像分析
图像分析 2015年3月16日
在HSV颜色空间中尝试阈值,以获得紫色斑点,而不是黑色斑点或黄色背景。
clc;清除命令窗口。
关闭所有关闭所有图形(imtool.)
清晰;删除所有现有变量。或者clearvars。
工作空间;确保显示工作区面板。
格式长g
格式紧凑的
fontSize = 14;
%===============================================================================
在彩色演示图像中读取。
文件夹=“D: \临时的东西”
baseFileName =“USM16.jpg”
获取包含路径的完整文件名。
fullFileName = fullfile(文件夹,baseFileName);
如果~存在(fullFileName“文件”
我在那儿没找到。检查它的搜索路径。
fullFileName = baseFileName;%这次没有路径。
如果~存在(fullFileName“文件”
还是没有找到。提醒用户。
errorMessage = sprintf(“错误:%s不存在。”, fullFileName);
uiwait (warndlg (errorMessage));
返回
结束
结束
rgbImage = imread(fullFileName);
获取图像的尺寸。numberOfColorBands = 3。
[rows, columns, numberOfColorBands] = size(rgbImage);
显示原始彩色图像。
Subplot (3,3,1);
imshow (rgbImage);
标题(“原始彩色图像”“字形大小”、字形大小);
将图形放大至全屏。
集(gcf,“单位”“归一化”“Outerposition”, [0,0,1,1]);
提取单独的红色、绿色和蓝色通道。
hsv = rgb2hsv(rgbImage);
hImage = hsv(:,:, 1);
sImage = hsv(:,:, 2);
vImage = hsv(:,:, 3);
显示图片
Subplot (3,3,4);
imshow (hImage []);
标题(“色调图像”“字形大小”、字形大小);
Subplot (3,3,5);
imshow (sImage []);
标题(“饱和图像”“字形大小”、字形大小);
Subplot (3,3,6);
imshow (vImage []);
标题(值图像的“字形大小”、字形大小);
让我们计算并显示直方图。
[pixelCount, grayLevels] = imhist(hImage);
Subplot (3,3,7);
栏(灰度、pixelCount);
网格
标题(“色相图像直方图”“字形大小”、字形大小);
xlim([0灰度(结束)]);手动缩放x轴。
让我们计算并显示直方图。
[pixelCount, grayLevels] = imhist(sImage);
Subplot (3,3,8);
栏(灰度、pixelCount);
网格
标题(饱和度图像直方图“字形大小”、字形大小);
xlim([0灰度(结束)]);手动缩放x轴。
让我们计算并显示直方图。
[pixelCount, grayLevels] = imhist(vImage);
Subplot (3,3,9);
栏(灰度、pixelCount);
网格
标题(“价值图像直方图”“字形大小”、字形大小);
xlim([0灰度(结束)]);手动缩放x轴。
使用//www.tatmou.com/matlabcentral/fileexchange/29372-thresholding-an-image手动阈值图像
% [lowThreshold, highThreshold] = threshold(。1, .9, vImage);
通过阈值化和结合不同通道得到一个二值图像。
hueBinary = hImage > 0.2 | hImage < 0.1;
饱和二进制= sImage > 0.22;
valueBinary = vImage > 0.28 & vImage < 0.9;
binaryImage = hueBinary & saturationBinary & valueBinary;
清除区域内小于400像素的颗粒。%
binaryImage = bwareaopen(binaryImage, 400);
填满斑点上的洞。。
binaryImage =填充(binaryImage,“黑洞”);
Subplot (3,3,2);
imshow (binaryImage []);
标题(细胞图像的“字形大小”、字形大小);
将图形放大至全屏。
集(gcf,“单位”“归一化”“Outerposition”, [0,0,1,1]);
为每个blob标上8连通性,以便我们对其进行测量
[labeledImage, numberOfBlobs] = bwlabel(binaryImage, 8);
应用各种伪颜色的区域。
coloredLabelsImage = label2rgb (labeledImage,“hsv”“k”“洗牌”);
显示伪彩色图像。
Subplot (3,3,3);
imshow (coloredLabelsImage);
标题(“标记图像”“字形大小”、字形大小);
获取所有blob属性。
blobMeasurements = regionprops(labeledImage,“所有”
numberOfBlobs = size(blobMeasurements, 1)
3评论
izyan hanum
izyan hanum 2015年3月17日
我使用matlab2013a。是的对的。当我在第一行调用代码时,它可以如下图所示。非常感谢。

登录评论。

更多答案(1)

肖恩·德·沃尔斯基
肖恩·德·沃尔斯基 2015年3月17日
使用colorThresholder应用程序,它可以让你调整边界
2的评论

登录评论。

标签

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!