How to clasify the color of each specific pixel to some constant
1 次查看(过去 30 天)
显示 更早的评论
Hello , I have this image where I have to relate the color of each pixel to some known constant. Let's say, red(including all pixels that are reddish, slightly red, etc.)=STRONG pixels; yellow(in the region of yellow)=WEAKER pixels; and so on... I have to do this for each pixel of my image and the problem I'm having is there are so many possibilities of getting a color somewhat red/reddish/pinkish (with rgb values being different) & all of them must be under the same STRONG pixels category.I've tried coding by taking ranges of values for rgb differenes, but I believe there should be another/clearer way to do so, which won't leave any pixel that is not in the range I've specified. My code is as following:
RedPIXELS='1010-808kPa';
YellowPIXELS='700-600kPa';
img=imread('1.jpg');
for k=1:vidHeight-1
if img(k,k,1)>250 && img(k,k,1)-img(k,k,2)>100 && img(k,k,1)-img(k,k,3)>100
img(k,k)=RedPIXELS;
if img(k,k,2)-img(k,k,1)<50 && img(k,k,3)<10
img(k,k)=YellowPIXELS;
end
end
end
0 个评论
采纳的回答
Walter Roberson
2016-1-17
No, there is no simpler or clearer way to do it along the lines you are proceeding, not if you want accuracy. The names that people associate with various RGB colors never form regular regions in RGB space, so you would have to code a lot of comparisons if you want to proceed like you are.
2 个评论
Walter Roberson
2016-1-17
Is there a reason that you are only examining along the major diagonal, and that you are assigning the resulting value back to the original matrix instead of to a different matrix? Note that assigning to img(k,k) like you do is the same as assigning to img(k,k,1) which is the red plane of the location you just examined. Also notice that with the structure of your code, when you examine img(k,k,1) for the determination of GreenEl, you are examining the img(k,k,1) that you might have just written to above in its alternate name of img(k,k)=RedEl .
更多回答(1 个)
Image Analyst
2016-1-17
Walter's right - eventually it comes down to thresholding, which is a part of color classification where you say if the color meets your threshold criteria then it belongs in that class. There are some functions that make that decision for you, such as rgb2ind() but they may not carve up the 3D color gamut exactly like you'd decide to. If you want good control you can use threshold, but to be robust to changes in illumination, you might want to do it in a different color space, such as HSV. Go to the Apps tab, and call up the Color Thresholder app. Then click load and load in your image. Then pick a color space from those shown, and then mess around with the thresholds to interactively get something you like. Then have it export the code which you can then paste into your own app.
By the way, I have several color segmentation demos in my File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/?term=authorid%3A31862 Feel free to adapt them to get different colors.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Display and Exploration 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!