1

画像の RGB キャプチャについて助けが必要です。私は impixel を使用して手動で画像から RGB を取得していますが、たとえば 20x20 ピクセルのボックスのグリッドを作成して、ボックスごとに RGB 値を自動的に通知するようにしたいと考えています。したがって、写真で20個のボックスがあるとしましょう。20個のRGB値が表示されます。ええ、そのRGBボックスを無視する空白が20%以上ある場合。

いくつかのリンクを教えてください。または、これを行う方法の一般的なアイデアを教えてください。

よろしくお願いします

PS 画像はただの .jpg で、背景は白で、真ん中にアイテムがあります。

アップデート

これは、impixel を使用して RGB を収集するための私のコードです

px=impixel(img);        
st = num2cell(px,1);
zstup = cellfun(@sum,st); 
zred = size(px,1);         
rez = bsxfun(@rdivide,zstup,zred); 
trez=round(rez); 

私がやりたいことは:

http://imageshack.us/photo/my-images/696/exsample.jpg/

したがって、A1、A2 などのすべてのボックスは、私のコードでは trez のような RGB 値を返します。

したがって、私のコードでは、trezデータをテーブルに保存します。これは、Excel のように 220 | 23 | 34、もし私が別の果物にそれをしたら、私は持っているでしょう

220 | 23 | 34

123 | 212| 78

等々...

自動化に戻ると、A7 と A 15 は適切な RGB 候補ではありません。なぜなら、これらには 50% を超える白い領域があるため、20% の白い領域はすべて無視されるからです。したがって、A31 は適切であり、RGB 値を保存する必要があります。

全体として、上記の例のように自動的に保存する必要がある 6 つの RGB 値があります。テーブルに保存する方法を知っています。すべてのボックスで RGB 値を収集するための助けが必要です。

4

2 に答える 2

1

あなたの正確なニーズに応じて、2つの解決策があります。

を使用して画像を縮小しますimpyramid(img, 'reduce')。これにより、元の画像の平均値で構成される小さな画像が得られます。次に、前に行ったことを実行して、単一のピクセルにアクセスします。2x2、4x4、8x8、またはそれ以上の「ボックス」を得るために必要な回数だけ繰り返します。

または、ボックス (または任意の形状) を 1 と 0 のマトリックスとして定義し、regionprops関数を使用して、1 を含むフィールドに応じて画像の内容に関する情報を取得することもできます。

roi = zeros(size(img))
roi(1:10,1:10) = 1;
r = regionprops(roi, img, 'MeanIntensity')
average = r.MeanIntensity
于 2012-09-19T11:56:36.527 に答える
0

これは、フォルダー内の写真から自動カラー グラブを行うための完全なコードです。そのため、プログラムはフォルダーを選択するように求め、その後、色と丸みに関する情報でいっぱいのテーブルを取得します。このコードを使用して、白い背景を持つ果物から色を取得しています。それはそれ自体ですべてを行います。それが誰かを助けることを願っています。

clear all;
clc;


uiwait(msgbox('Chose the folder where your pictures are kept. Click OK to continue..'));

% Opening the folder

folder = uigetdir(pwd); 
filePattern = fullfile(folder, '*.jpg');
jpegFiles = dir(filePattern);
    for k = 1:length(jpegFiles)
        baseFileName = jpegFiles(k).name;
        fullFileName = fullfile(folder, baseFileName);
        [pathstr, name, ext] = fileparts(fullFileName);
        naziv_voca=name;

        %Taking RGB color

        slika = imread(fullFileName);
        [redovi stupci RGBboje] = size(slika);
        red_ink = floor(redovi/10);
        stup_ink = floor(stupci/10);
        r = 1;
        c = 1;
        for stupac = 1 : stup_ink  : stupci
            for red = 1 : red_ink : redovi
            red1 = red;
            red2 = red1 + red_ink;
            stupac1 = stupac;
            stupac2 = stupac1 + stup_ink;
            red2 = min(red2, redovi);
            stupac2 = min(stupac2, stupci);
            crveniS = slika(red1:red2, stupac1:stupac2, 1);
            zeleniS = slika(red1:red2, stupac1:stupac2, 2);
            plaviS = slika(red1:red2, stupac1:stupac2, 3);
            crvena(r,c) = mean2(crveniS);
            zelena(r,c) = mean2(zeleniS);
            plava(r,c) = mean2(plaviS);
            r = r + 1;
                if r >redovi
                    r = 1;
                end
            end
            c = c + 1;
                if c >1
                    c = 1;
                end
            end

        RGB=[crvena,zelena,plava];
        bijela=[255 255 255];
        tolerancija = 50;
        rez = RGB((abs(RGB(:,1)-bijela(1)) > tolerancija) | (abs(RGB(:,2)-bijela(2)) > tolerancija),:);
        trez=round(rez); 


        %Taking shape

        pic = rgb2gray(slika);
        threshold = graythresh(pic);
        bw = im2bw(pic,threshold);
        fbw = ones(size(bw))-imfill(ones(size(bw))-bw); 
        invImg = ~fbw;
        f = bwlabel(invImg);
        S = regionprops(f,'Area','Perimeter','centroid');
        Thr=100;
        S=S([S.Area]>Thr);
        score = (min(sqrt([S.Area]),[S.Perimeter]/4)./(max(sqrt([S.Area]), [S.Perimeter]/4))).^2;
        score=max(score);

        %Inserting data into table and creating data

        if exist('tablica.mat','file')
            vel=size(trez,1);
            for z=1:vel
                s=load('tablica');
                olddata=s.data;
                temp=trez(z,:);
                dataCell= [naziv_voca,num2cell(temp),num2cell(score)]; 
                data=[olddata;dataCell];
                save('tablica.mat','-append','data');
            end
        else
            stupac_rgb = num2cell(trez,1);
            zstupac = cellfun(@sum,stupac_rgb); 
            zred = size(trez,1);           
            rez = bsxfun(@rdivide,zstupac,zred); 
            trez=round(rez);
            data= [naziv_voca,num2cell(trez),num2cell(score)];
            save('tablica','data')
        end 

    end  
    uiwait(msgbox('Your information is saved'));
于 2013-02-07T11:01:36.520 に答える