• Author
  • Cardiff School of Computer Science &Informatics, Cardiff University, Cardiff, UK
  • Editor
  • Cardiff School of Computer Science &Informatics, Cardiff University, Cardiff, UK
> > Inspecting Glass Bottles and Jars
FREE ARTICLE

Inspecting Glass Bottles and Jars

Introduction

Despite the popularity of plastic containers, glass bottles and jars remain important for sealing and preserving food products, toiletries and pharmaceuticals. The raw materials are abundant and inexpensive. Although it is brittle, glass is strong and chemically inert, resistant to microbial attack and impervious to water, oil, alcohol, etc. It can be moulded to form a wide variety of useful shapes. It also has the attractive feature of being transparent, which allows the contents to be presented in a visually appealing way. It can also be coloured for cosmetic effect.

Glass is ubiquitous, yet it is potentially dangerous, particularly if it breaks and the resulting shards are swallowed. There is a wide range of defects in moulded glassware used for food and drink (bottles, jars, cheap tumblers, dishes, bowls, etc.) that should be considered:
  • Malformations (These are often due to moulding faults as when molten glass is injected into the mould when it is too hot, or sticks to the mould as it opens.)
  • Cracks, checks and crizzles (The latter do not penetrate right through the glass wall.)
  • Inclusions (These might typically be stone-like fragments of refractory materials that have broken off the lining of the crucible holding the liquid glass.)
  • Air bubbles
  • Loose glass fragments (For example, a vial breaks during manufacture and scatters flakes and slivers, contaminating nearby containers.)
  • Spikes (These are "stalagmites" of glass, found typically in jars and other items that are made by pressing or a press-blow manufacturing process. They occur on the base or side walls of a jar.)
  • Bird-swings (These are horizontal filaments of glass that span across the inside of a bottle. Physically, they resemble stalagmites and stalactites that have joined together. They result from a faulty blow-blow manufacturing process. They occur only on the side walls of a bottle.)

This is a much simplified catalogue of defects that are known to arise in everyday bottles, jars, tumblers. Loose glass fragments, in the form of thin strands, flakes and slivers can occur virtually anywhere. In this short chapter we can only consider a few of these defects; our intention is to highlight the potential for applying Machine Vision, even in an area, such as this where the product is often difficult to illuminate and view. Some defects are euphemistically called critical in the glass industry: in lay terms dangerous!

Many of the faults that occur in glassware can only be detected properly by optical means. They cannot, for example, be detected by touch. However, a modern manufacturing line produces bottles at a speed that exceeds a human being's ability to inspect them reliably. Recall the cartoon in Chap.1, showing a (male) human inspector distracted by a fair damsel. (Female inspectors are also susceptible to distraction!) Thus, there is a need for automated visual inspection equipment that can meet this need. In this chapter we briefly explore the subject and will consider some of the topics that a vision engineer designing an inspection system for glass-ware must address.

Lighting and Viewing

There are several possible methods for inspecting glassware:
  • Back-illumination. The light source, bottle and camera are in line.
  • Dark-field illumination (Fig. 31.1 ).
  • Injecting light into the fully formed product from a small number of carefully chosen "point" sources.
  • Observing self-emission in the Near-Infra Red wave band, from hot glasss (i.e. after moulding but before annealing.
MediaObjects/978-1-84996-169-1_31_Fig1_HTML.gif
Fig. 31.1 Dark-field illumination. (a) Area-scan camera. (b) Line-scan camera

These are all described in detail and illustrated in Chap. 40 and will not be discussed further. From a vision engineer's perspective, one of the most important features of glass is its clarity and refractive properties (refractive index is about 1.5-1.7). Care must always be taken to shield a glass object from ambient light during inspection. This rule should be followed whether it is being examined automatically or by eye. Failure to do so will result in poor quality images with highlights occurring in a host of unexpected places. This is caused by direct surface reflection and "ducting" of light by total internal reflection through the body of the product.

Both line-scan and standard (array) cameras have been used for glass inspection. A line-scan camera allows a distinctive form of dark-field illumination to be used. As the camera's field of view is a very thin rectangle, light can be injected into the glass wall very close to it. There is no direct counterpart using an area-scan camera. Moreover, many bottles and jars have a circular cross section. Again, a line-scan camera offers a unique opportunity in providing an all-round view, which is useful for detecting local defects (Fig. 31.2 ).
MediaObjects/978-1-84996-169-1_31_Fig2_HTML.gif
Fig. 31.2 During inspection a round bottle is held between two contra-rotating belts. If the speed of these belts is carefully chosen, the bottle rotates rapidly as it advances slowly along the belt. (It is transported by the side belts and slips on the conveyor.) Hence, a line-scan camera is able to sense local features, such as bird-swings, stones, cracks, etc., wherever they occur around the cylindrical surface of a jar or bottle.
Some of the images in the chapter show vignetting and lens distortion, which a telecentric lens would avoid (Chap. 6). This is why the sides of the bottle in Fig. 31.3 do not appear parallel. The close-up view of the mouth of a bottle (Fig. 31.4 ) shows another problem: circular features are seen as ellipses of varying eccentricity, depending on their vertical position. In some cases, the effect is that of looking up and sometimes looking down. Again, a telecentric lens would avoid this, viewing all such features precisely side-ways on.
MediaObjects/978-1-84996-169-1_31_Fig3_HTML.jpg
Fig. 31.3 Preliminary processing steps, tracing the outer edge of a bottle. (a) Original image. Back lighting. (b) Background intensity changes over a wide range. Numerals indicate intensity values in the original image. (c) Posterised image, emphasises the variable background intensity. (d) Edge detector. (e) Noise removal. (f) "Shadow" projecting to the right [QT: rox]. (g) Shadow projecting to the left. (h) ANDing the two "shadow" images. (i) Effects of noise pixels outside the bottle profile. This shows why kgr is needed.
MediaObjects/978-1-84996-169-1_31_Fig4_HTML.gif
Fig. 31.4 Testing algorithm robustness. The bottom row relates to a brown vial with dark-field illumination. Notice the parallax effect, which is particularly pronounced in the third row. Highlights due to glinting (second row) have no effect on the profile but would if they appeared at the edge of the bottle

Bottle Shape

Shape and size measurement is an obvious requirement for both bottles and jars. We shall illustrate various ideas with reference to a back-illuminated bottle. First, however, we must consider how we generate a binary image on which appropriate dimensional measurements can be taken. Consider the bottle shown in Fig. 31.3a . This a typical circularly symmetrical bottle and will serve to illustrate how we derived a suitable algorithm, using the QT interactive image processing system (Chap. 21). As we shall show later, the same procedure has subsequently been applied quite successfully to other glass containers and to images obtained using dark-filed illumination.

Pre-processing

First, of all, we must admit that Fig. 31.3a is not a particularly good of a bottle but it suits our purposes. The background intensity is highly variable as shown in Fig. 31.3b and c . This is due to the use of a multi-purpose lens from a digital photographic camera. There is too much ambient light, which causes glinting on the neck and left shoulder. While our casual approach to image formation seems to ignore the lessons so earnestly expressed elsewhere in this book, there is a serious point to be made: the algorithm we have devised is robust and is able to cope easily with these avoidable artifacts. This is in contrast to simple thresholding which is too unreliable. After a short period of experimentation, the following procedure was devised using QT:

lnb,

% Largest neighbour

sub,

% Subtract. This & previous command forms edge detector. Other options available

neg,

% Negate

enc,

% Enhance contrast

thr(100),

% Threshold ( Fig. 31.3d )

kgr(100),

% Keep only big blobs ( Fig. 31.3e ). Figure 31.3i shows benefits of this operation)

rox,

% Row maximum ( Fig. 31.3f )

wri,

% Save image

swi,

% Switch Current & Alternate images

lrt,

% Flip image horizontally

rox,

% Row maximum

lrt,

% Flip image horizontally ( Fig. 31.3g )

rei,

% Read image saved earlier

mni,

% AND images together ( Fig. 31.3h )

Having established an effective algorithm for generating a "solid" profile image, we can now begin to measure the shape of the bottle.

Vertical Sides

There are four important measurements:
  1. Are the sides straight?
  2. Are the sides parallel?
  3. Are the sides vertical?
  4. Is the seperation between the sides correct?

An important point to note is that, at any given moment, we know what type of bottles the factory is making. Hence, we know the ideal dimensions of the bottles we are inspecting. Hence we can use absolute position measurements in the vertical direction.

A simple test can be based on two horizontal scan lines, one positioned just below the shoulder and the other just above the base (Fig. 31.5 ). For simplicity, we shall consider only one side (left). Let us suppose that these scan-lines are at heights Y1 (lower) and Y2 (upper). We need only scan along these two lines to find the corresponding X-coordinates. Call them X1 and X2. The angle of the side wall is then given by
(31.1)
MediaObjects/978-1-84996-169-1_31_Fig5_HTML.jpg
Fig. 31.5 Measuring the angle and straightness of the side walls. Y1 and Y2 are fixed in the knowledge of the product dimensions. To check the straightness of the side wall, draw a thick line [QT: vpl(X1,Y1,X2,Y2,255), dil(tolerance)]. The edge of the bottle should be confined to this thick line
A similar calculation yields θright, the angle of the other side wall. Clearly, θleft and (180 −) should be very nearly equal. The tilt of the bottle can be estimated by finding
(31.2)

Ideally, this should be 90°.

The straightness of the side walls can be checked very easily in the following way (Fig. 31.5 ).
  • Draw a white line between [X1,Y1] and [X2,Y2].
  • Expand this line using binary dilation.
  • The amount of dilation determines the tolerance band.
  • The edge of the bottle should lie entirely within this thickened line.
A more robust procedure uses regression to fit the straight line (Fig. 31.6 ). This can be used to measure the angle of the side wall and check its straightness in the same way as already described.
MediaObjects/978-1-84996-169-1_31_Fig6_HTML.gif
Fig. 31.6 Using regression analysis to fit a straight line to (the left-hand edge of) a bottle. (a) Edge pixel coordinates within the limits indicated by the two black lines formed the input for the regression analysis program. (b) Straight line fitted to the edge pixels. Numbers indicate coordinate values, relative the top-left corner of the image [QT: pft(780,1320,50,1)]

Neck and Shoulder

The physical strength of a bottle is determined in large part by the radius/radii of curvature of its neck-shoulder region. This parameter is particularly important if a downwards thrust is applied during capping. Using similar edge-sampling techniques to those already described, it is possible to fit circles and polynomial curves. In Fig. 31.7a and b , just three edge points were used to calculate the circle parameters. (QT: fcd. Notice that the QT command pft(y1,y2,no_of_points,2) fits a general 2nd-order curve; it is not constrained to be a circle.) A polynomial curve can be fitted in a similar manner (Figs. 31.7c and 31.8 ). The following M-function shows how the parameters of 3-point circles and polynomials can be calculated. (The QT function pft works in a similar way on the second half of bottle.)
MediaObjects/978-1-84996-169-1_31_Fig7_HTML.jpg
Fig. 31.7 Fitting circles to the neck-shoulder region using just three pixels. (a) Shoulder. This circle was fitted using just three edge pixels. [QT: fcd] (b) Neck. (c) 3rd-order polynomial function. This and (b) were generated using bottle, listed in the text
MediaObjects/978-1-84996-169-1_31_Fig8_HTML.gif
Fig. 31.8 Fitting curves. (a) Original image. The black lines indicate sampling limits. (b) 3rd-order polynomial function [QT: pft(390,650,50,3)]

function bottle

% Demonstration: Fit 3rd order polynomial & circle to neck/shoulder region of a bottle. [1/0]

global current

% Standard QT declaration

global alternate

% Standard QT declaration

rni(31)

% Read standard image

enc

% Enhance contrast

thr

% Threshold at mid-grey

neg

% Negate

binary = current;

% Keep result of all this hard work for use again later

[x,y,r] = fce(49,30,30);

% Fit circle; 'hardwired' parameters since we know the bottle

s = ['Circle parameters: X = ',int2str(x),', Y = ',int2str(y),', R = ',int2str(r)];

rni(31)

% Read standard image again

swi,

% Interchange Current & Alternate images

adi,

% Add Current & Alternate images

mxi

% Maximum intensity in Current & Alternate images

alt = current;

% Keep result

current = binary;

% Restore image saved earlier

[x,y] = hzs(80,275, 25);

% Find X values from 25 scan lines in Y-interval [80,275]

p = polyfit(y,x,3);

% Polynomial fitting program (MATLAB function)

q = polyval(p,y);

% Evaluate polynomial (MATLAB function)

zer

% Black image - same size as Current image was

[u,v] = size(y);

% How big is the image?

for i = 2:v

% Draw curve as liece-wise linear function

vpl(round(q(i)),round(y(i)), round(q(i-1)),round(y(i-1)),255)

end

% Next line: Formatting message for the user

t = ['; Polynomial: (',num2str(p(1)),'*y^3) + (', num2str(p(2)),'*y^2) + ... (',num2str(p(3)),'*y) + (',num2str(p(1)),')'];

rni(31)

% Read standard image yet again

swi,

% Interchange Current & Alternate images

adi,

% Add Current & Alternate images

mxi

% Maximum intensity in Current & Alternate images

alternate = alt;

% Recover intermediate result, ready to display it

subplot(1,2,1) , imshow(current)

% Display image

subplot(1,2,2) , imshow(alternate)

% Display image

Symmetry, Tilt and Gross Misshapes

In order to verify that a bottle is upright and symmetrical, we use a simplified (i.e. one-dimensional) version of the medial axis transform (Chap. 13). The QT function mch finds the mid-point of each vertical white chord in a binary image. Hence, to generate the white pixels in Fig. 31.9 we applied the following QT command sequence to the binary image in Fig. 31.3h

yxt

% Interchange X and Y axes because mch works on vertical chords

mch

% Mid point of vertical chord

mch

% Repetition is necessary because mch does not finish the job on large images

yxt

% Interchange X and Y axes - restore image to original orientation

MediaObjects/978-1-84996-169-1_31_Fig9_HTML.jpg
Fig. 31.9 Central axis, used for verifying that the bottle is tilted and symmetrical
For a well-made bottle, the points generated in this way should all lie on, or very near, a vertical white line. A straight line (L) can then be fitted to these points, by regression analysis. L is, of course, an estimate of the axis of symmetry. Its orientation is a measure of the tilt. Flipping the image about L allows the symmetry to be checked (Fig. 31.10 ). If the neck of the bottle were bent to one side, L would not fit all of the white points accurately.
MediaObjects/978-1-84996-169-1_31_Fig10_HTML.jpg
Fig. 31.10 Checking whether a bottle is symmetrical. Flipping the binary image about the axis of symmetry shows the differences between the two sides of the bottle. Simply counting the black pixels gives a crude measure of symmetry
Another simple but effective check can be made at the same time, by measuring the length of each horizontal chord across the bottle. This yields a graph like that shown in Fig. 31.11 . This can easily be compared to the ideal width profile and will immediately warn us, for example, if the bottle has collapsed under its own weight when it was in a semi-molten state. Figure 31.12 shows the kind of defect that can be detected in this way.
MediaObjects/978-1-84996-169-1_31_Fig11_HTML.jpg
Fig. 31.11 Bottle width measurements
MediaObjects/978-1-84996-169-1_31_Fig12_HTML.jpg
Fig. 31.12 Lower portion of the edge of a bottle with a serious fault: a "fin" caused by the mould not closing properly. (a) Original image. Dark-field illumination. (b) Binary image generated by the algorithm as described in Sect. 31.3.1

Other Features

In addition to shape, there is a variety of other important features on bottles, jars, tumblers and other glass containers. It is impossible to cover these in full here. Hence, we shall simply demonstrate that Machine Vision can be used effectively in other ways.

Measuring Filling Level

Checking that a glass vessel is fully charged is clearly of interest, particularly in industries such as food, toiletries, cosmetics and pharmaceuticals. Two distinct approaches seem promising. In the first, the meniscus is detected by exploiting the fact that it produces a dark horizontal streak with back-lighting (Fig. 31.13 ). Integrating the intensity along the rows of the image produces a one-dimensional array of numbers from which the height of the meniscus can be calculated. The meniscus position corresponds to a local minimum in this array. When the meniscus lies within the neck-shoulder region, this method is less reliable, although it is effective in Fig. 31.16 .
MediaObjects/978-1-84996-169-1_31_Fig13_HTML.jpg
Fig. 31.13 Filling level in small clear glass vial. (a) Original image. Back lighting. (b) Plot of total intensity in each row [QT: rin, csh, wgx,sub, thr]. (c) Centre line of the dark horizontal streak due to the meniscus [QT: rin, thr(X), thn finds the centre line]
MediaObjects/978-1-84996-169-1_31_Fig16_HTML.jpg
Fig. 31.16 Detecting changes in stripe width/spacing using morphology. (a) Original image. The poor definition of the edges of the broad black stripe does not adversely affect this method. (b) Filling level detected [QT: wri, enc, thr, eri(200,1), [x,y] = tlp; zer, [w,h] = dgw; vpl(1,y,w,y,255), rei, swi,adi,mxi]
In the second method, we make use of the fact that a filled round bottle forms a crude cylindrical lens, which may be used to distort a pattern, such as a series of vertical parallel lines, placed behind it. In Fig. 31.14 , the tumbler is a simple cylinder, with no embossing. It is a straightforward matter to detect the sudden change in the width and spacing of the dark stripes. A slightly different approach is taken in Fig. 31.15 , where a single magnified stripe "fills" the jar, up to the meniscus but not above it. The vertical position of the transition can be detected by the function jar_fill_level, defined below. This is based on run-length coding (rlc) and thresholding (thr(X)) to find horizontal cords that have more than X white pixels. (The value of X is chosen to be a little greater that the width of the stripe as it appears where there is no water present.) Here is the listing of jar_fill_level.
MediaObjects/978-1-84996-169-1_31_Fig14_HTML.gif
Fig. 31.14 Distortion of a striped background pattern by a partially filled cylindrical tumbler with vertical straight sides, a thick bottom of solid glass but no embossing. Notice that the width and spacing of the dark stripes is changed by the water, which forms a cylindrical lens
MediaObjects/978-1-84996-169-1_31_Fig15_HTML.jpg
Fig. 31.15 Second method for finding the filling level. (a) Original image. A single black stripe is magnified by the glass-air "lens" so that it fills the whole width of the jar. The background stripe is visible at the very top of the image. (b) The white line is the output of jar_fill_level

function y = jar_fill_level

% Find the the filling level in a jar. [1/0]

global current

% Standard QT declaration

global alternate

% Standard QT declaration

original = current;

% Save original image

enc

% Enhance contrast

thr(0,127)

% Threshold at mid-grey

kgr(1000)

% Eliminate blobs with area < 1000 pixels

yxt

% Interchange X and Y axes

rlc

% Run-length code

thr(250)

% Threshold

big

% Select biggest blob

yxt

% Interchange X and Y axes

[x,y] = tlp;

% Top-left-most point

zer

% Black image

[w,h] = dgw;

% Picture dimensions

vpl(1,y,w,y,255)

% Draw horizontal white line at height

alternate = original;

% Recover original image

subplot(1,2,1) , imshow(current)

% Display Current image

subplot(1,2,2) , imshow(alternate)

% Display Alternate image

An alternative algorithm detects changes in the width and spacing of the stripes using morphology. The structuring element should be in the form of a horizontal line, one pixel high. Figure 31.16 illustrates this.

Bird-swings, Spikes, Embossing

A bird-swing is a critical defect that occurs in bottles. It consists of a filament of glass that spans the interior of the bottle and is attached at two diametrically opposed points on the side wall. The roots of the filament are conical. This is important as the roots deflect back-lighting and cause a dark shadow. A spike is like a stalagmite of glass attached at only one end and may occur on the base or side wall of a jar. Once again, the root has a conical form. Bottles are made by a blow-blow process and jars by a press-blow process. Hence, they are susceptible to different types of defect. A bird-swing/spike, in a stationary bottle/jar is easily detectable by human eye. However in a factory, when the product is moving at a high rate (perhaps exceeding ten bottles/jars per second), this is not so easy. People get bored and tired on repetitive inspection tasks and are easily distracted. For these reasons, a human inspector will not detect all critical defects with resulting product safety and liability concerns.

Two series of bird-swing/spike images are shown in Fig. 31.17 (back-lighting) and Fig. 31.18 (dark-field illumination). In view of the high contrast, simple thresholding is able to detect both types of defect quite successfully, with either type of illumination. To be sure that thresholding is independent of lamp brightness variations, it is always good idea to normalise the intensity scale first. (QT: enc. As is emphasised throughout this book, this is good practice, since light levels can vary as lamps age or supply voltages vary. People are insensitive to such changes.) However, Fig. 31.17 and Fig. 31.18 are unrepresentative in showing bird-swings and spikes in clear areas, where there is no embossing. It is evident in Fig. 31.4 (two top rows), that embossing can also produce high contrasts. This means that, in order to detect bridswings/spikes, we have to examine the embossing for deviations from the norm. This is not always easy or reliable. This is one situation where the product might usefully be designed with inspection in mind. Since bird-swings and spikes are both potentially dangerous types of defect, anything that aids their detection is welcome.
MediaObjects/978-1-84996-169-1_31_Fig17_HTML.jpg
Fig. 31.17 Critical defects due to excess glass. Back illumination. (a) Bird-swing viewed from the side. Notice the conical roots of the filament, which can be several millimetres thick or as fine as a human hair. The latter is more dangerous. (b) Bird-swing, viewed near end-on. This is the preferred viewing angle. (c) Bird-swing. The dark vertical streak is the shadow of the moulding seam. (d) Bird-swing. The dark patch at the bottom is the image of the table-top. (e) Spike (The author's daughter narrowly missed injury from this defect, which occured in a milk-bottle. The tail of the spike is finer than a human hair.)
MediaObjects/978-1-84996-169-1_31_Fig18_HTML.jpg
Fig. 31.18 Dark-field illumination produces total internal reflection on bird-swings and spikes. The high contrast produced in this way makes simple fixed-parameter thresholding straightforward. (a) Original image: bird-swing. (b) Original image: bird-swing. (c) Original image: spike. (d) Bird-swing, thresholded. (e) Bird-swing, thresholded. (f) Spike, thresholded

Cracks

Cracks need no introduction. Crizzles or checks are like cracks but do not penetrate right through the glass. Both can be seen, either as dark streaks, if they block light from a back-illumination source, or very bright if they deflect light by total internal reflection at the fracture surface. If the crack is viewed edge on, it may not be visible at all see (Fig. 31.19a ). It is always worth experimenting with the angle of the lighting viewing arrangement, to optimise the contrast created by cracks. Sometimes, cracks form preferentially in one direction, rather than another. In this case directional lighting from one side (or top/bottom) may produce the best results.
MediaObjects/978-1-84996-169-1_31_Fig19_HTML.jpg
Fig. 31.19 Crack, plain-sided tumbler. (a) Original image. Notice that the crack, which is continuous, sometimes appears dark, bright or totally disappears. (b) Dark and light streaks highlighted separately [QT: crack2(11,135,50,4)]

The morphological closing operator (QT: crk) is an effective way of detecting dark (or bright) streaks produced by cracks. Here is a more complete algorithm that includes noise-reduction filtering.

function crack(a,b,c,d)

% Demonstration: Detect cracks manifest as dark streaks. Bright streaks are ignored [0/0]

global current

global alternate

% Default parameters were set to detect the crack in a ferrous component: QT image no. 41

if nargin == 0

a = 5;

b = 145;

c = 50;

d = 4;

end

original = current;

crk(a)

% Adjust parameter to taste: bigger for wider cracks

thr(b)

% Fiddle with this parameter

kgr(c)

% Discard blobs with area < c pixels

dil(d)

% Dilate, noise reduction filter - part 1

ero(d)

% Erosion, noise reduction filter - part 2

rbe

% Remove blobs touching image border

alternate = original;

subplot(1,2,1) , imshow(current)

subplot(1,2,2) , imshow(alternate)

In order to detect cracks in glass that can be either bright or dark compared to the background, it is necessary to apply crack twice, before merging the results (Fig. 31.19b ).

function crack2(a,b,c,d)

global current

global alternate

original = current;

mdf(5)

% Median filter, noise reduction

wri(1)

% Save original image

crack(a,b,c,d)

% Defined above - detecting dark streaks

wri(2)

% Save intermediate result for later

rei(1)

% Read original image

neg

% Negate

crack(a,b,c,d)

% Defined above - detecting bright streaks

neg

% Negate

rei(2)

% Read intermediate result saved a little while ago

adi

% Add images

neg

% Negate (Purely cosmetic function: keep original dark-bright polarity)

alternate = original;

subplot(1,2,1) , imshow(current)

subplot(1,2,2) , imshow(alternate)

As the author was searching for a suitable algorithm, several others were investigated using QT. (This is exactly what QT was designed to do.) Convolution (high-pass) and DOLP filtering are obvious alternatives producing results that are roughly comparable to those created by crack and crack2. However, they are certainly no better and are often inferior.

Final Remarks

In this short chapter, we have only touched on the subject of inspecting glass-ware. We have not considered embossing, stress, loose glass fragments, etching, decorative cutting, engraving, glass-metal seals, glass-glass fusion, coloured glass, air bubbles (accidental and intended), crizzles, staining, surface dirt and inclusions. Inspecting optical components is a highly specialised subject and relies heavily on high-purity lighting from lasers. Inspection through glass is also important. In this, we include products such as glass instrument covers, computer display screens, automobile wind-screens, head-lamps, etc. Clearly, glass inspection is a big and important subject. However much work we do, there will always be new challenges where the quality and safety of glass products needs to be improved.