[Matlab] afbeelding van 3D matrix vloeiende kleurovergangen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Kid Jansen
  • Registratie: Oktober 2005
  • Niet online
Ik ben bezig met het verwerken van de testdata voor m'n review van de Eizo ColorEdge CG277. Eén van de tests die ik heb gedaan is de uniformiteit te meten door een wit vlak in een 19x11 raster te meten met de X-Rite i1Pro.

Nou heb ik al een aantal analyses van die data gemaakt met Matlab in de vorm van intensiteitsplots (contourf plot):
  • ∆CCT
  • ∆% helderheid
  • contrastverdeling
  • dE L*a*b* kleurverschil
  • dE94 kleurverschil
  • dE00 kleurverschil
Die zijn vooral handig om te beoordelen hoe goed de uniformiteit voldoet aan specifieke eisen. Maar om het beter te visualiseren wilde ik ook gewoon een afbeelding maken van de uniformiteit zelf.

Om dat te doen heb ik het volgende gedaan:
  • In Matlab matrix gemaakt van alle RGB-combinaties in de sRGB kleurruimte voor een kleurdiepte van 8 bpc en een gammawaarde van 2,2
  • Bradford chromatic adaptation matrix gemaakt van het witpunt van het middelste meetpunt naar D65
  • Chromatic adaptation toegepast op ruwe xyY meetdata (xyY > XYZ > chromatic adaptation > xyY_adapted)
  • Beste RGB-match gezocht op basis van laagste dE00 kleurverschil voor het helderste meetpunt (uit xyY_adapted) op basis van chromaticiteit
  • xyY_adapted genormaliseerd naar die RGB-match (> xyY_adapted_norm)
  • Beste RGB-matches gezocht voor alle meetpunten in xyY_adapted_norm op basis van laagste dE00 kleurverschil
Die laatste stap levert de matrix in de onderstaande code op. Het stukje code zet dat van een 209x3 matrix om in een 11x19x3 3D RGB matrix en maakt daar vervolgens een afbeelding van. Nou ben ik hier al best wel tevreden mee, maar als het mogelijk is zou ik graag willen dat Matlab er een afbeelding van maakt met vloeiende kleurovergangen.

Het scherm is een 27" scherm met een actief gedeelte van 596,7 x 335,7 mm. Dat onderverdeeld in 19x11 vlakjes levert vlakjes op van 31,4 x 30,5 mm. Ik heb elk vlakje (ongeveer) in het midden gemeten. De i1Pro heeft een sensor opening met een diameter van 4,5 mm. Nu heeft elk vlakje de kleur van het meetpunt, terwijl de oppervlakte van een vlakje 60 keer zo groot is als dat van het meetpunt. Dat klopt natuurlijk niet helemaal. Dus wat ik graag zou willen is dat Matlab de kleuren uit de matrix gebruikt voor het midden van elk vlakje, maar alle tussenliggende kleuren interpoleert.

Kan dat en zo ja, hoe doe ik dat?


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
RGB_comb = [0.913725490196078 0.929411764705882 0.937254901960784; 0.929411764705882 0.945098039215686 0.949019607843137;
0.952941176470588 0.960784313725490 0.964705882352941; 0.968627450980392 0.976470588235294 0.980392156862745;
0.972549019607843 0.984313725490196 0.992156862745098; 0.976470588235294 0.984313725490196 0.992156862745098;
0.972549019607843 0.984313725490196 0.988235294117647; 0.972549019607843 0.980392156862745 0.988235294117647;
0.980392156862745 0.984313725490196 0.992156862745098; 0.976470588235294 0.984313725490196 0.988235294117647;
0.980392156862745 0.980392156862745 0.992156862745098; 0.972549019607843 0.980392156862745 0.992156862745098;
0.980392156862745 0.984313725490196 0.996078431372549; 0.976470588235294 0.984313725490196 0.996078431372549;
0.980392156862745 0.980392156862745 0.996078431372549; 0.980392156862745 0.980392156862745 0.992156862745098;
0.980392156862745 0.976470588235294 0.992156862745098; 0.976470588235294 0.972549019607843 0.988235294117647;
0.964705882352941 0.960784313725490 0.980392156862745; 0.913725490196078 0.925490196078431 0.925490196078431;
0.937254901960784 0.945098039215686 0.945098039215686; 0.952941176470588 0.956862745098039 0.956862745098039;
0.964705882352941 0.972549019607843 0.972549019607843; 0.980392156862745 0.980392156862745 0.980392156862745;
0.980392156862745 0.984313725490196 0.984313725490196; 0.976470588235294 0.980392156862745 0.984313725490196;
0.976470588235294 0.976470588235294 0.976470588235294; 0.976470588235294 0.976470588235294 0.976470588235294;
0.976470588235294 0.976470588235294 0.980392156862745; 0.976470588235294 0.976470588235294 0.984313725490196;
0.984313725490196 0.980392156862745 0.984313725490196; 0.980392156862745 0.980392156862745 0.984313725490196;
0.984313725490196 0.976470588235294 0.980392156862745; 0.984313725490196 0.980392156862745 0.984313725490196;
0.984313725490196 0.976470588235294 0.984313725490196; 0.988235294117647 0.976470588235294 0.980392156862745;
0.980392156862745 0.968627450980392 0.972549019607843; 0.972549019607843 0.960784313725490 0.968627450980392;
0.901960784313726 0.913725490196078 0.917647058823529; 0.925490196078431 0.929411764705882 0.929411764705882;
0.945098039215686 0.949019607843137 0.949019607843137; 0.960784313725490 0.968627450980392 0.968627450980392;
0.972549019607843 0.976470588235294 0.976470588235294; 0.976470588235294 0.976470588235294 0.976470588235294;
0.972549019607843 0.980392156862745 0.980392156862745; 0.968627450980392 0.972549019607843 0.972549019607843;
0.976470588235294 0.972549019607843 0.972549019607843; 0.976470588235294 0.976470588235294 0.976470588235294;
0.980392156862745 0.980392156862745 0.980392156862745; 0.980392156862745 0.976470588235294 0.980392156862745;
0.980392156862745 0.976470588235294 0.980392156862745; 0.984313725490196 0.976470588235294 0.980392156862745;
0.988235294117647 0.980392156862745 0.984313725490196; 0.980392156862745 0.976470588235294 0.984313725490196;
0.972549019607843 0.964705882352941 0.972549019607843; 0.952941176470588 0.949019607843137 0.964705882352941;
0.956862745098039 0.945098039215686 0.949019607843137; 0.917647058823529 0.925490196078431 0.925490196078431;
0.933333333333333 0.941176470588235 0.937254901960784; 0.945098039215686 0.956862745098039 0.952941176470588;
0.972549019607843 0.976470588235294 0.976470588235294; 0.968627450980392 0.976470588235294 0.976470588235294;
0.968627450980392 0.976470588235294 0.972549019607843; 0.968627450980392 0.976470588235294 0.976470588235294;
0.968627450980392 0.972549019607843 0.972549019607843; 0.976470588235294 0.976470588235294 0.976470588235294;
0.972549019607843 0.972549019607843 0.976470588235294; 0.976470588235294 0.976470588235294 0.980392156862745;
0.980392156862745 0.980392156862745 0.980392156862745; 0.980392156862745 0.976470588235294 0.980392156862745;
0.976470588235294 0.976470588235294 0.980392156862745; 0.980392156862745 0.980392156862745 0.984313725490196;
0.984313725490196 0.976470588235294 0.984313725490196; 0.972549019607843 0.968627450980392 0.980392156862745;
0.956862745098039 0.952941176470588 0.964705882352941; 0.949019607843137 0.945098039215686 0.956862745098039;
0.925490196078431 0.933333333333333 0.933333333333333; 0.945098039215686 0.949019607843137 0.949019607843137;
0.960784313725490 0.964705882352941 0.968627450980392; 0.964705882352941 0.976470588235294 0.976470588235294;
0.968627450980392 0.972549019607843 0.972549019607843; 0.968627450980392 0.972549019607843 0.972549019607843;
0.976470588235294 0.972549019607843 0.972549019607843; 0.968627450980392 0.972549019607843 0.972549019607843;
0.968627450980392 0.972549019607843 0.972549019607843; 0.968627450980392 0.976470588235294 0.980392156862745;
0.976470588235294 0.976470588235294 0.980392156862745; 0.976470588235294 0.976470588235294 0.980392156862745;
0.976470588235294 0.976470588235294 0.980392156862745; 0.976470588235294 0.972549019607843 0.976470588235294;
0.976470588235294 0.976470588235294 0.984313725490196; 0.984313725490196 0.980392156862745 0.988235294117647;
0.980392156862745 0.976470588235294 0.984313725490196; 0.972549019607843 0.968627450980392 0.976470588235294;
0.960784313725490 0.952941176470588 0.964705882352941; 0.925490196078431 0.937254901960784 0.941176470588235;
0.960784313725490 0.968627450980392 0.964705882352941; 0.968627450980392 0.976470588235294 0.972549019607843;
0.968627450980392 0.976470588235294 0.968627450980392; 0.972549019607843 0.976470588235294 0.972549019607843;
0.976470588235294 0.972549019607843 0.972549019607843; 0.972549019607843 0.972549019607843 0.968627450980392;
0.968627450980392 0.976470588235294 0.968627450980392; 0.972549019607843 0.972549019607843 0.972549019607843;
0.980392156862745 0.980392156862745 0.980392156862745; 0.980392156862745 0.980392156862745 0.984313725490196;
0.980392156862745 0.976470588235294 0.980392156862745; 0.980392156862745 0.976470588235294 0.984313725490196;
0.976470588235294 0.976470588235294 0.980392156862745; 0.976470588235294 0.976470588235294 0.980392156862745;
0.980392156862745 0.976470588235294 0.984313725490196; 0.980392156862745 0.976470588235294 0.984313725490196;
0.980392156862745 0.972549019607843 0.980392156862745; 0.960784313725490 0.956862745098039 0.968627450980392;
0.941176470588235 0.952941176470588 0.952941176470588; 0.968627450980392 0.972549019607843 0.976470588235294;
0.968627450980392 0.980392156862745 0.976470588235294; 0.980392156862745 0.976470588235294 0.980392156862745;
0.976470588235294 0.976470588235294 0.976470588235294; 0.972549019607843 0.976470588235294 0.972549019607843;
0.976470588235294 0.976470588235294 0.976470588235294; 0.976470588235294 0.980392156862745 0.976470588235294;
0.980392156862745 0.976470588235294 0.976470588235294; 0.980392156862745 0.976470588235294 0.980392156862745;
0.980392156862745 0.980392156862745 0.984313725490196; 0.984313725490196 0.980392156862745 0.980392156862745;
0.988235294117647 0.980392156862745 0.984313725490196; 0.984313725490196 0.980392156862745 0.988235294117647;
0.984313725490196 0.984313725490196 0.988235294117647; 0.984313725490196 0.980392156862745 0.988235294117647;
0.980392156862745 0.976470588235294 0.984313725490196; 0.992156862745098 0.976470588235294 0.976470588235294;
0.960784313725490 0.960784313725490 0.976470588235294; 0.941176470588235 0.952941176470588 0.952941176470588;
0.968627450980392 0.972549019607843 0.972549019607843; 0.968627450980392 0.976470588235294 0.968627450980392;
0.976470588235294 0.976470588235294 0.976470588235294; 0.980392156862745 0.976470588235294 0.972549019607843;
0.968627450980392 0.972549019607843 0.968627450980392; 0.976470588235294 0.972549019607843 0.972549019607843;
0.976470588235294 0.976470588235294 0.972549019607843; 0.980392156862745 0.976470588235294 0.972549019607843;
0.976470588235294 0.976470588235294 0.980392156862745; 0.976470588235294 0.976470588235294 0.980392156862745;
0.980392156862745 0.980392156862745 0.980392156862745; 0.980392156862745 0.976470588235294 0.980392156862745;
0.980392156862745 0.976470588235294 0.980392156862745; 0.980392156862745 0.976470588235294 0.980392156862745;
0.976470588235294 0.976470588235294 0.984313725490196; 0.984313725490196 0.976470588235294 0.984313725490196;
0.980392156862745 0.972549019607843 0.984313725490196; 0.960784313725490 0.960784313725490 0.976470588235294;
0.929411764705882 0.941176470588235 0.949019607843137; 0.964705882352941 0.972549019607843 0.968627450980392;
0.972549019607843 0.976470588235294 0.972549019607843; 0.968627450980392 0.972549019607843 0.972549019607843;
0.980392156862745 0.976470588235294 0.968627450980392; 0.976470588235294 0.972549019607843 0.968627450980392;
0.976470588235294 0.976470588235294 0.972549019607843; 0.972549019607843 0.972549019607843 0.968627450980392;
0.976470588235294 0.972549019607843 0.968627450980392; 0.984313725490196 0.976470588235294 0.976470588235294;
0.980392156862745 0.976470588235294 0.972549019607843; 0.980392156862745 0.976470588235294 0.976470588235294;
0.988235294117647 0.976470588235294 0.976470588235294; 0.984313725490196 0.976470588235294 0.976470588235294;
0.980392156862745 0.976470588235294 0.980392156862745; 0.980392156862745 0.976470588235294 0.984313725490196;
0.984313725490196 0.976470588235294 0.984313725490196; 0.984313725490196 0.980392156862745 0.988235294117647;
0.960784313725490 0.956862745098039 0.960784313725490; 0.952941176470588 0.956862745098039 0.960784313725490;
0.972549019607843 0.980392156862745 0.980392156862745; 0.972549019607843 0.976470588235294 0.972549019607843;
0.976470588235294 0.976470588235294 0.972549019607843; 0.980392156862745 0.980392156862745 0.976470588235294;
0.980392156862745 0.976470588235294 0.976470588235294; 0.980392156862745 0.976470588235294 0.976470588235294;
0.980392156862745 0.976470588235294 0.972549019607843; 0.980392156862745 0.980392156862745 0.980392156862745;
0.988235294117647 0.984313725490196 0.984313725490196; 0.984313725490196 0.980392156862745 0.980392156862745;
0.976470588235294 0.972549019607843 0.976470588235294; 0.984313725490196 0.976470588235294 0.980392156862745;
0.976470588235294 0.972549019607843 0.976470588235294; 0.980392156862745 0.976470588235294 0.976470588235294;
0.984313725490196 0.976470588235294 0.984313725490196; 0.976470588235294 0.976470588235294 0.992156862745098;
0.988235294117647 0.984313725490196 1.000000000000000; 0.972549019607843 0.968627450980392 0.980392156862745;
0.952941176470588 0.960784313725490 0.968627450980392; 0.964705882352941 0.972549019607843 0.976470588235294;
0.968627450980392 0.972549019607843 0.976470588235294; 0.968627450980392 0.976470588235294 0.976470588235294;
0.976470588235294 0.976470588235294 0.980392156862745; 0.964705882352941 0.968627450980392 0.968627450980392;
0.960784313725490 0.960784313725490 0.964705882352941; 0.972549019607843 0.968627450980392 0.968627450980392;
0.972549019607843 0.976470588235294 0.980392156862745; 0.976470588235294 0.972549019607843 0.984313725490196;
0.976470588235294 0.972549019607843 0.976470588235294; 0.984313725490196 0.972549019607843 0.980392156862745;
0.976470588235294 0.972549019607843 0.980392156862745; 0.976470588235294 0.972549019607843 0.980392156862745;
0.968627450980392 0.972549019607843 0.980392156862745; 0.972549019607843 0.968627450980392 0.980392156862745;
0.980392156862745 0.972549019607843 0.984313725490196; 0.980392156862745 0.980392156862745 0.996078431372549;
0.964705882352941 0.968627450980392 0.988235294117647];

UniformityImage = zeros(11,19,3);

iCol = 1;
iRow = 1;
i = 1;

while i <= 209

    UniformityImage(iRow,iCol,:) = RGB_comb(i,:);

    if iCol == 19
        iCol = 1;
        iRow = iRow + 1;
    else
        iCol = iCol + 1;
    end

    i = i + 1;
end

image(UniformityImage)
axis off


Geïnstalleerde toolboxes:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
MATLAB                                                Version 8.3        (R2014a)
Simulink                                              Version 8.3        (R2014a)
Communications System Toolbox                         Version 5.6        (R2014a)
Computer Vision System Toolbox                        Version 6.0        (R2014a)
Control System Toolbox                                Version 9.7        (R2014a)
Curve Fitting Toolbox                                 Version 3.4.1      (R2014a)
DSP System Toolbox                                    Version 8.6        (R2014a)
Data Acquisition Toolbox                              Version 3.5        (R2014a)
Global Optimization Toolbox                           Version 3.2.5      (R2014a)
Image Acquisition Toolbox                             Version 4.7        (R2014a)
Image Processing Toolbox                              Version 9.0        (R2014a)
Instrument Control Toolbox                            Version 3.5        (R2014a)
MATLAB Report Generator                               Version 3.16       (R2014a)
Mapping Toolbox                                       Version 4.0.1      (R2014a)
Neural Network Toolbox                                Version 8.2        (R2014a)
Optimization Toolbox                                  Version 7.0        (R2014a)
Parallel Computing Toolbox                            Version 6.4        (R2014a)
Partial Differential Equation Toolbox                 Version 1.4        (R2014a)
Phased Array System Toolbox                           Version 2.2        (R2014a)
Signal Processing Toolbox                             Version 6.21       (R2014a)
SimDriveline                                          Version 2.6        (R2014a)
SimElectronics                                        Version 2.5        (R2014a)
SimEvents                                             Version 4.3.2      (R2014a)
SimMechanics                                          Version 4.4        (R2014a)
SimPowerSystems                                       Version 6.1        (R2014a)
Simscape                                              Version 3.11       (R2014a)
Simulink 3D Animation                                 Version 7.1        (R2014a)
Simulink Control Design                               Version 4.0        (R2014a)
Simulink Design Optimization                          Version 2.5        (R2014a)
Simulink Report Generator                             Version 3.16       (R2014a)
Stateflow                                             Version 8.3        (R2014a)
Statistics Toolbox                                    Version 9.0        (R2014a)
Symbolic Math Toolbox                                 Version 6.0        (R2014a)
Wavelet Toolbox                                       Version 4.13       (R2014a)

Acties:
  • 0 Henk 'm!

  • muksie
  • Registratie: Mei 2005
  • Laatst online: 03-05 14:14
Klinkt alsof je een uitgebreide review aan het schrijven bent! Matlab kan dit soort dingen vrij eenvoudig doen met interp2, je moet de interpolatie indices zelf uitrekenen (bijv. met linspace en meshgrid) en extrapolatie is aan de randen nodig. Volgens mij doet onderstaande code wat jij wilt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
data_RGB = permute(reshape(RGB_comb, [19, 11, 3]), [2 1 3]);
figure(2);
image(data_RGB);
axis off;

xv = linspace(0.5, 11.5, 550);
yv = linspace(0.5, 19.5, 950);
[yvg,xvg] = meshgrid(yv, xv);

data_RGB_smooth = zeros(length(xv), length(yv), 3);
for i=1:3
    data_RGB_smooth(:,:,i) = interp2(data_RGB(:,:,i), yvg, xvg, 'linear', 'extrap');
end

figure(3);
image(data_RGB_smooth);
axis off;


De 550 en 950 in de linspace aanroepen zijn het gewenste formaat in pixels. Veel succes! De permute en reshape doen volgens mij hetzelfde als wat jij in je while lus doet.

Als interpolatie methode zou je ook 'cubic' kunnen gebruiken i.p.v. 'linear'.

  • Kid Jansen
  • Registratie: Oktober 2005
  • Niet online
Bedankt voor je snelle reactie. Ik heb nu pas de mogelijkheid om er ook echt naar te kijken, want ik was gisteren de hele dag op de ISE in de RAI en omdat ik daar heel erg vroeg voor op moest lag ik dinsdag al vroeg in m'n bed.

Het wordt inderdaad een heel erg uitgebreide review, al moet ik nog zien hoe ik dat ga doen. De review kan namelijk niet veel langer worden dan m'n review van de AOC q2770Pqu (vanwege het tekenlimiet), maar ik heb wel veel meer testdata. Ik zal alles dus zeer efficiënt moeten verwerken in de review.

Wat betreft de code in je reactie, ik krijg een fout bij deze regel:

code:
1
data_RGB_smooth(:,:,i) = interp2(data_RGB(:,:,i), yvg, xvg, 'linear', 'extrap');
Error using interp2
EXTRAPVAL must be a scalar.
Als ik kijk naar de extrapval variabele in de interp2 functie heb ik daar volgens mij niet zoveel aan, want dan is alles buiten het domein van X en Y automatisch een constante.

Wat naar mijn idee het meest in de richting komt is het stuk aan de rand buiten de buitenste meetpunten extrapoleren als de helft van het tegenovergestelde van het verschil in omgekeerde richting.

Dus stel dat het verschil tussen één van de buitenste meetpunten naar een naastgelegen meetpunt één rij (of kolom) naar binnen RGB +2;-4;+6 is, dat dan het verschil tussen dat meetpunt haaks naar de rand RGB -1;+2;-3 is.

Als ik die regel verander in het onderstaande werkt de code wel, maar dan heb ik dus geen extrapolatie van de buitenste meetpunten naar de rand toe, toch?

code:
1
data_RGB_smooth(:,:,i) = interp2(data_RGB(:,:,i), yvg, xvg, 'linear');


Ik krijg dan in ieder geval een dikke zwarte rand om het vlak heen. Of heeft dat er niks mee te maken?


EDIT: ik heb het laatste gedeelte van jouw code nu aangepast naar het onderstaande. Ik heb nu geen zwarte rand meer en het resultaat lijkt goed overeen te komen met wat je zou verwachten op basis van de niet-geïnterpoleerde weergave.

code:
1
2
3
4
5
6
7
8
9
10
for i=1:3
    data_RGB_smooth(:,:,i) = interp2(data_RGB(:,:,i), yvg, xvg, 'spline');
end

data_RGB_smooth_clipped = data_RGB_smooth;
data_RGB_smooth_clipped(data_RGB_smooth_clipped>1) = [1];

figure(3);
image(data_RGB_smooth_clipped);
axis off;


De clipping is nodig omdat je met cubic en spline als interpolatiemethode RGB-waarden krijgt hoger dan 1 (Matlab maakt gebruik van decimale RGB-waarden van 0 ≤ waarde ≤ 1). Mooier zou zijn om de waarden opnieuw te normaliseren, maar dat kan niet zomaar met RGB. Dan zou je eerst naar XYZ moeten, dan naar xyY, vervolgens normaliseren, terug naar XYZ, terug naar RGB. Ik denk niet dat dat de moeite waard is, want maar 3‰ van de subpixels clipped en dat is voor 99,9% in het blauwe kanaal (minst zichtbaar) en ook nog eens met een gemiddelde van maar 1,00366 en een max van 1,01548.

[ Voor 23% gewijzigd door Kid Jansen op 13-02-2015 01:27 ]


Acties:
  • 0 Henk 'm!

  • muksie
  • Registratie: Mei 2005
  • Laatst online: 03-05 14:14
Ik had even octave (opensource Matlab clone) gebruikt om mijn code te testen, omdat ik tegenwoordig alleen op m'n werk nog Matlab heb. Blijkbaar is de interp2 implementatie in octave dus iets anders m.b.t. extrapolatie. Het 'gebrek' aan extrapolatie zorgde voor de zwarte rand, maar dat heb je blijkbaar al opgelost door spline te gebruiken.

Acties:
  • 0 Henk 'm!

  • Kid Jansen
  • Registratie: Oktober 2005
  • Niet online
Voordeel is dat spline ook een heel stuk nauwkeuriger is dan linear voor het geïnterpoleerde deel. Ik heb het resultaat gisteren nog even gecontroleerd met de eyedropper tool in Photoshop en de sample points kloppen exact qua locatie en de interpolatie ziet er ook goed uit.

Acties:
  • 0 Henk 'm!

  • Kid Jansen
  • Registratie: Oktober 2005
  • Niet online
Kwam er net achter dat er nog een fout in de code zat, de buitenste meetpunten rondom hebben namelijk niet de juiste meetpositie volgens het grid doordat het meetapparaat te groot was om dicht genoeg langs de rand te meten.

Langs de zijranden zou het 15,70 mm vanaf de rand moeten zijn en langs de boven- en onderrand 15,26 mm. In de praktijk was dit echter 22 mm vanuit de rand. Ik heb daarom X en Y positievectoren toegevoegd in de interp2 functie. Omdat het wel zo makkelijk is om het in millimeters te doen heb ik dat ook meteen gedaan voor de linspace functies en tegelijk ook het aantal sample points verhoogd naar het aantal pixels van de afbeelding van het uiteindelijke resultaat.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
format long

RGB_comb = xlsread('RGBmatch.xlsm','BestMatches','I1:K209')/255;

data_RGB = permute(reshape(RGB_comb, [19, 11, 3]), [2 1 3]);
figure(2);
image(data_RGB);
axis off;


X_position = [22.000 47.111 78.518 109.925 141.332...
172.739 204.147 235.554 266.961 298.368 329.775 361.182...
392.589 423.997 455.404 486.811 518.218 549.625 574.736];

Y_position = [22.000; 45.772; 76.287; 106.802; 137.317;...
167.832; 198.347; 228.862; 259.377; 289.892; 313.664];

xv = linspace(0, 335.664, 1984);
yv = linspace(0, 596.736, 1112);
[yvg,xvg] = meshgrid(yv, xv);

data_RGB_smooth = zeros(length(xv), length(yv), 3);
for i=1:3
    data_RGB_smooth(:,:,i) = interp2(X_position, Y_position, data_RGB(:,:,i), yvg, xvg, 'spline');
end

data_RGB_smooth_clipped = data_RGB_smooth;
data_RGB_smooth_clipped(data_RGB_smooth_clipped>1) = [1];

figure(3);
image(data_RGB_smooth_clipped);
axis off;


Hoewel het resultaat binnen de meetpunten beter zal zijn met deze code ga ik denk ik toch de oude "foute" code gebruiken. Met de bovenstaande code is de rand rondom die geëxtrapoleerd moet worden bijna anderhalf keer zo breed en dat leid tot zeer extreme resultaten langs de randen die juist veel minder representatief zijn voor de werkelijkheid.

Acties:
  • 0 Henk 'm!

  • muksie
  • Registratie: Mei 2005
  • Laatst online: 03-05 14:14
Je kunt ook eens proberen iets te maken zodat je 'constante extrapolatie' gebruikt: gebruik voor alle pixels in de rand (waarvan je de waarde dus moet bepalen m.b.v. extrapolatie) de waardie die 'op de rand' gebruikt zou worden. Dit kun je bijvoorbeeld doen door de xvg en yvg indices te clampen, in pseudocode zoiets:
code:
1
2
xvg = min(max(xvg, X_position(1)), X_position(end));
yvg = min(max(yvg, Y_position(1)), Y_position(end));
Pagina: 1