当前位置:文档之家› Chapter 6 Aggregate Functions, GROUP BY, and HAVING Clauses

Chapter 6 Aggregate Functions, GROUP BY, and HAVING Clauses

Chapter 6 Aggregate Functions, GROUP BY, and HAVING Clauses
Chapter 6 Aggregate Functions, GROUP BY, and HAVING Clauses

Chapter6.Aggregate Functions,GROUP BY,and HAVING Clauses Chapter Objectives

In this chapter,you will learn about:

?Aggregate Functions

?The GROUP BY and HAVING Clauses

In the last two chapters,you learned about character functions,number functions,date functions,and miscellaneous functions—all single-row functions.In this chapter,you will learn about aggregate functions,which work on groups of rows.The most commonly used aggregate functions are discussed.Aggregate functions allow you to generate summary data for a group of rows to obtain totals,averages,counts,minimum values,and maximum values.In Chapter17,“Exploring Data Warehousing Features,”you will learn about advanced SQL aggregation topics involving the ROLLUP and CUBE operators.

Lab6.1.Aggregate Functions

Lab Objectives

After this lab,you will be able to:

?Use Aggregate Functions in a SQL Statement

?Understand the Effect of Nulls on Aggregate Functions

Aggregate functions do just as you would expect:They aggregate,or group together,data to produce a single result.Questions such as“How many students are registered?”and“What is the average cost of a course?”can be answered by using aggregate functions.You count the individual students to answer the first question,and you calculate the average cost of all courses to answer the second.In each case,the result is a single answer,based on several rows of data.

The COUNT Function

One of the most common aggregate functions is the COUNT function,which lets you count values in a table.The function takes a single parameter,which can be a column in a table of any data type and can even be the asterisk(*)wildcard.The following SELECT statement returns the number of rows in the ENROLLMENT table:

SELECT COUNT(*)

FROM enrollment

COUNT(*)

---------

226

1row selected.

COUNT and Nulls

The COUNT function is useful for determining whether a table has data.If the result returns the number0when you use COUNT(*),it means there are no rows in the table,even though the table exists.

Following is an example of the COUNT function used with a database column as a parameter.The difference is that COUNT(*) counts rows that contain null values,whereas COUNT with a column excludes rows that contain nulls.

SELECT COUNT(final_grade),COUNT(section_id),COUNT(*)

FROM enrollment

COUNT(FINAL_GRADE)COUNT(SECTION_ID)COUNT(*)

--------------------------------------------

1226226

1row selected.

The FINAL_GRADE column in the ENROLLMENT table allows null values,and there is only one row with a value in the

FINAL_GRADE column.Therefore,the result of the function is1.COUNT(section_id)returns the same number as COUNT(*) because the SECTION_ID column contains no nulls.

COUNT and DISTINCT

DISTINCT is often used in conjunction with aggregate functions to determine the number of distinct values.There are226rows in the ENROLLMENT table but64distinct section IDs.Several students are enrolled in the same section;therefore,individual section IDs usually exist more than once in the ENROLLMENT table.

SELECT COUNT(DISTINCT section_id),COUNT(section_id)

FROM enrollment

COUNT(DISTINCTSECTION_ID)COUNT(SECTION_ID)

------------------------------------------

64226

1row selected.

You can use the UNIQUE keyword in place of DISTINCT.

The SUM Function

The SUM function adds values together for a group of rows.The following example adds up all the values in the CAPACITY column of the SECTION table.The result is the total capacity of all sections.If any value in the CAPACITY column contains a null,these values are ignored.

SELECT SUM(capacity)

FROM section

SUM(CAPACITY)

-------------

1652

1row selected.

The AVG Function

The AVG function returns the average of a group of rows.The following example computes the average capacity of each section. Any nulls in the capacity column are ignored.To substitute a zero for a null,use the NVL or COALESCE function,as discussed in Chapter4,“Character,Number,and Miscellaneous Functions.”

SELECT AVG(capacity),AVG(NVL(capacity,0))

FROM section

AVG(CAPACITY)AVG(NVL(CAPACITY,0))

---------------------------------

21.17948721.179487

1row selected.

In this example,there are no sections with null values in the CAPACITY column;therefore,the results of the two functions are identical.

The MIN and MAX Functions

The MIN and MAX functions are opposites of each other,providing the minimum and maximum values,respectively,in a group of rows.The result shows the lowest value in the CAPACITY column in the SECTION table;this value is10,and the highest value is25.

SELECT MIN(capacity),MAX(capacity)

FROM section

MIN(CAPACITY)MAX(CAPACITY)

--------------------------

1025

1row selected.

MIN and MAX with Different Data Types

The previous example operates on the CAPACITY column,which is of the NUMBER data type.The MIN and MAX functions can take other data types as parameters.The next example shows the use of these functions with the DATE data type and displays the first and last registration dates in the STUDENT table.

SELECT MIN(registration_date)"First",

MAX(registration_date)"Last"

FROM student

First Last

------------------

22-JAN-0723-FEB-07

1row selected.

A less frequently used data type for the MIN and MAX functions is the VARCHAR2data type.The following query shows the minimum or maximum value of the DESCRIPTION column and returns the first and last values,in an alphabetized list of values.

SELECT MIN(description)AS MIN,MAX(description)AS MAX

FROM course

MIN MAX

--------------------------------------------------

Advanced Java Programming Unix Tips and Techniques

1row selected.

The capital letter A is equal to the ASCII value65,B is66,and so on.Lowercase letters,numbers,and characters all have their own ASCII values.Therefore,MIN and MAX can be used to evaluate a character’s respective first and last letters,in alphabetical order. Aggregate Functions and Nulls

Except for the COUNT(*)function,all the aggregate functions you have learned about so far ignore null values.You use the NVL or COALESCE function to substitute for any null values.An aggregate function always returns a row.Even if the query returns no rows,the result is simply one row with a null value;the COUNT function always returns either a zero or a number.

Aggregate Functions and CASE

Placing a CASE expression within an aggregate function can be useful if you want to manipulate or select specific values before applying the aggregate function.For example,the following SQL statement shows the computation of the average course cost. If the value in the PREREQUISITE column is null,the value in the COST column is multiplied by1.1;if the value is equal to20, it is multiplied by1.2;in all other cases,the value retrieved in the COST column remains unchanged.

SELECT AVG(CASE WHEN prerequisite IS NULL THEN cost*1.1

WHEN prerequisite=20THEN cost*1.2

ELSE cost

END)AS avg

FROM course

AVG

----------

1256.13793

1row selected.

Aggregate Function Syntax

Table6.1lists the most commonly used aggregate functions and their corresponding syntax.As you may notice,you can use the DISTINCT keyword with all these functions to evaluate only the distinct(or unique)values.The ALL keyword is the default option and evaluates all rows.The DISTINCT keyword is really useful only for the AVG,SUM,and COUNT functions.In place of DISTINCT, you can substitute the UNIQUE keyword.

https://www.doczj.com/doc/de3994841.html,monly Used Aggregate Functions Function Purpose

COUNT({*|[DISTINCT|ALL] expression)Counts the number of rows.The wildcard(*)option includes duplicates and null values.

SUM([DISTINCT|ALL]value)Computes the total of a value;ignores nulls.

AVG([DISTINCT|ALL]value)Finds the average value;ignores nulls.

MIN(expression)Determines the minimum value of an expression;ignores nulls.

MAX(expression)Determines the maximum value of an expression;ignores nulls.

Lab6.1.Exercises

a)Write a SELECT statement that determines how many courses do not have a prerequisite.

b)Write a SELECT statement that determines the total number of students enrolled.Count each student only once,

no matter how many courses the student is enrolled in.

c)Determine the average cost for all courses.If the course cost contains a null value,substitute the value0.

d)Write a SELECT statement that determines the date of the most recent enrollment.

Lab6.1.Exercise Answers

a)Write a SELECT statement that determines how many courses do not have a prerequisite.

ANSWER:The COUNT function is used to count the number of rows in the COURSE table where the values in the PREREQUISITE column are null.

SELECT COUNT(*)

FROM course

WHERE prerequisite IS NULL

COUNT(*)

---------

4

1row selected

b)Write a SELECT statement that determines the total number of students enrolled.Count each student only once,

no matter how many courses the student is enrolled in.

ANSWER:Use DISTINCT in conjunction with the COUNT function to count distinct students,regardless of how many times

they appear in the ENROLLMENT table.

SELECT COUNT(DISTINCT student_id)

FROM enrollment

COUNT(DISTINCTSTUDENT_ID)

-------------------------

165

1row selected.

c)Determine the average cost for all courses.If the course cost contains a null value,substitute the value0.

ANSWER:Both the NVL function and the COALESCE function substitute any null value with a zero.The NVL or COALESCE function must be nested inside the AVG function.

SELECT AVG(NVL(cost,0))

FROM course

AVG(NVL(COST,0))

----------------

1158.5

1row selected.

The following is another possibility.

SELECT AVG(COALESCE(cost,0))

FROM course

If you do not substitute the nulls for the zero value,the average course cost returns a different,more accurate,

result.

SELECT AVG(cost)

FROM course

AVG(COST)

---------

1198.4483

1row selected.

d)Write a SELECT statement that determines the date of the most recent enrollment.

ANSWER:The MAX function determines the most recent value in the ENROLL_DATE column of the ENROLLMENT table.

SELECT MAX(enroll_date)

FROM enrollment

MAX(ENROL

---------

21-FEB-07

1row selected.

Lab6.1.Quiz

In order to test your progress,you should be able to answer the following questions.

1)How many of these functions are aggregate functions?AVG,COUNT,SUM,ROUND.

______a)One

______b)Two

______c)Three

______d)Four

2)Which problem does the following SQL statement solve?

SELECT NVL(MAX(modified_date),

TO_DATE('12-MAR-2012','DD-MON-YYYY'))

FROM enrollment

______a)Display the date when a STUDENT table was last modified.

______b)Display the date when a STUDENT record was last modified.Replace any null value with the date March12,2012.

______c)Show the date when a record in the ENROLLMENT table was last modified.If the result returns a null value,display March12,2012.

______d)For all the ENROLLMENT records,show the date12-Mar-2012.

3)An aggregate function can be applied on a single row.

______a)True

______b)False

4)The following SQL statement contains an error.

SELECT AVG(*)

FROM course

______a)True

______b)False

5)The following SQL statement determines the average of all capacities in the SECTION table.

SELECT AVG(UNIQUE capacity)

FROM section

______a)True

______b)False

6)The following SQL statement contains an error.

SELECT SUM(capacity*1.5)

FROM section

______a)True

______b)False

ANSWERS APPEAR IN APPENDIX A.

Lab6.2.The GROUP BY and HAVING Clauses

Lab Objectives

After this lab,you will be able to:

?Use the GROUP BY Clause

?Apply the HAVING Clause

The GROUP BY and HAVING clauses allow you to categorize and aggregate data further.This lab analyzes the data in the STUDENT schema tables,using various aggregation functions.

The GROUP BY Clause

The GROUP BY clause determines how rows are grouped.The aggregate function together with the GROUP BY clause shows the aggregate value for each group.For example,for all the different locations,you can determine the number of rows or the average, minimum,maximum,or total capacity.

To understand the result of the GROUP BY clause without an aggregate function,compare it to that of the DISTINCT clause.

The following two queries return the same result,which is a distinct list of the values in the LOCATION column.

SELECT DISTINCT location

SELECT location

FROM section

GROUP BY location

LOCATION

--------

H310

L206

...

M311

M500

12rows selected.

If you want to expand on this example and now include how many times each respective location value is listed in the SECTION table,you add the COUNT(*)function in the query.

SELECT location,COUNT(*)

FROM section

GROUP BY location

LOCATION COUNT(*)

------------------

H3101

L2061

L21010

L2113

L21415

...

M5001

12rows selected.

Essentially,the GROUP BY clause and the aggregate function work hand-in-hand.Based on the distinct values,as listed in the GROUP BY clause,the aggregate function returns the result.

You can change the SQL query to determine other values for the distinct LOCATION column.For example,the following statement includes the aggregate functions SUM,MIN,and MAX in the SELECT list.For each distinct location,you see the total capacities with the SUM function,which adds up all the values in the CAPACITY column.The MIN and MAX functions return the minimum and maximum capacities for each respective location.

SELECT location,COUNT(*),SUM(capacity)AS sum,

MIN(capacity)AS min,MAX(capacity)AS max

GROUP BY location

LOCATION COUNT(*)SUM MIN MAX

----------------------------------

H3101151515

L2061151515

L210102001525

L2113551525

L214152751525

...

M5001252525

12rows selected.

You can validate the result of the query by looking at one of the rows.For example,the row with the LOCATION value L211has three rows,according to the COUNT function.The total of all the values in the CAPACITY column is55(25+15+15).The minimum value of the CAPACITY column is15,and the maximum value is25.

SELECT location,capacity,section_id

FROM section

WHERE location='L211'

LOCATION CAPACITY SECTION_ID

----------------------------

L21125119

L21115133

L21115153

3rows selected.

Grouping by Multiple Columns

The following query applies the aggregate functions to the distinct values of the LOCATION and the INSTRUCTOR_ID columns; therefore,the statement returns more rows than the previous GROUP BY query.

SELECT location,instructor_id,

COUNT(*),SUM(capacity)AS sum,

MIN(capacity)AS min,MAX(capacity)AS max

FROM section

GROUP BY location,instructor_id

ORDER BY1

LOCATION INSTRUCTOR_ID COUNT(*)SUM MIN MAX

-----------------------------------------------

H3101031151515

L2061081151515

L2101011151515

L2101032401525

L2101041252525

L2101052401525

L2101061252525

L2101083551525

L2141024701525

...

M5001021252525

39rows selected.

When you examine the output,you notice that there are six rows for the L210location.For this location,each row has a different INSTRUCTOR_ID value.On each of these six distinct LOCATION and INSTRUCTOR_ID combinations,the aggregate functions are applied.For example,the first row has only one row with this LOCATION and INSTRUCTOR_ID combination,and the second row has two rows,as you see from the number in the COUNT(*)column.Once again,you can validate the result by issuing an individual query against the SECTION table.

SELECT location,instructor_id,capacity,section_id

FROM section

WHERE location='L210'

ORDER BY1,2

LOCATION INSTRUCTOR_ID CAPACITY SECTION_ID

-----------------------------------------

L21010115117

L2101031581

L21010325150

L2101042596

L2101052591

L21010515129

L2101062584

L2101081586

L21010815155

L21010825124

10rows selected.

Oracle Error ORA-00979

Every column you list in the SELECT list,except the aggregate function column itself,must be repeated in the GROUP BY clause. Following is the error Oracle returns when you violate this rule.

SQL>SELECT location,instructor_id,

2COUNT(*),SUM(capacity)AS sum,

3MIN(capacity)AS min,MAX(capacity)AS max

4FROM section

5GROUP BY location

6/

SELECT location,instructor_id,

*

ERROR at line1:

ORA-00979:not a GROUP BY expression

The error message indicates that Oracle does not know how to process this query.The query lists the LOCATION and INSTRUCTOR_ID columns in the SELECT list but only the LOCATION column in the GROUP BY clause.Essentially,Oracle is confused about the SQL statement.The GROUP BY clause lists only the LOCATION column,which determines the distinct values. But the statement fails to specify what to do with the INSTRUCTOR_ID column.

Sorting Data

The GROUP BY clause groups the rows,but it does not necessarily sort the results in any particular order.To change the order, use the ORDER BY clause,which follows the GROUP BY clause.The columns used in the ORDER BY clause must appear in the SELECT list,which is unlike the normal use of ORDER BY.In the following example,the result is sorted in descending order by the total capacity.You can use the column alias in the ORDER BY clause.

SELECT location"Location",instructor_id,

COUNT(location)"Total Locations",

SUM(capacity)"Total Capacity"

FROM section

GROUP BY location,instructor_id

ORDER BY"Total Capacity"DESC

The HAVING Clause

The purpose of the HAVING clause is to eliminate groups,just as the WHERE clause is used to eliminate rows.Expanding on the previous SQL statement,the following query showing the applied HAVING clause restricts the result set to locations with a total capacity value of more than50students.

SELECT location"Location",instructor_id,

COUNT(location)"Total Locations",

SUM(capacity)"Total Capacity"

FROM section

GROUP BY location,instructor_id

HAVING SUM(capacity)>50j277

ORDER BY"Total Capacity"DESC

Location INSTRUCTOR_ID Total Locations Total Capacity

--------------------------------------------------

L5091065115

L509101485

L507101375

L507107375

L509105375

...

L214106355

14rows selected.

The WHERE and HAVING Clauses

As previously mentioned,the HAVING clause eliminates groups that do not satisfy its condition.This is in contrast to the WHERE clause,which eliminates rows even before the aggregate functions and the GROUP BY and HAVING clauses are applied.

SELECT location"Location",instructor_id,

COUNT(location)"Total Locations",

SUM(capacity)"Total Capacity"

FROM section

WHERE section_no IN(2,3)

GROUP BY location,instructor_id

HAVING SUM(capacity)>50

Location INSTRUCTOR_ID Total Locations Total Capacity

--------------------------------------------------

L214104355

1row selected.

The WHERE clause is executed by the database first,narrowing the result set to rows in the SECTION table where SECTION_NO equals either2or3(that is,the second or third section of a course).The next step is to group the results by the columns listed in the GROUP BY clause and to apply the aggregate functions.Finally,the HAVING condition is tested against the groups.Only rows with a total capacity of greater than50are returned in the result.

Multiple Conditions in the HAVING Clause

The HAVING clause can use multiple operators to further eliminate any groups,as in the following example.Either the columns used in the HAVING clause must be found in the GROUP BY clause or they must be aggregate functions.In the following example, the aggregate COUNT function is not mentioned in the SELECT list,yet the HAVING clause refers to it.The second condition of the HAVING clause chooses only location groups with a starting value of L5.In this particular example,it is preferable to move this condition to the WHERE clause because doing so eliminates the rows even before the groups are formed,and the statement will therefore execute faster.

SELECT location"Location",

SUM(capacity)"Total Capacity"

FROM section

WHERE section_no=3

GROUP BY location

HAVING(COUNT(location)>3

AND location LIKE'L5%')

Location Total Capacity

------------------------

L507100

L509175

2rows selected.

Constants and Functions without Parameters

Any constant,such as a text or number literal or a function that does not take any parameters,such as the SYSDATE function, may be listed in the SELECT list without being repeated in the GROUP BY clause.This does not cause the ORA-00979error message.The following query shows the text literal‘Hello’,the number literal1,and the SYSDATE function in the SELECT list of the query.These expressions do not need to be repeated in the GROUP BY clause.

SELECT'Hello',1,SYSDATE,course_no"Course#",

COUNT(*)

FROM section

GROUP BY course_no

HAVING COUNT(*)=5

'HELLO1SYSDATE Course#COUNT(*)

-----------------------------------------

Hello108-APR-091005

Hello108-APR-091225

Hello108-APR-091255

3rows selected.

The Order of the Clauses

The HAVING clause can appear before the GROUP BY clause,as shown in the following example,but this is rarely seen in practice.

SELECT course_no"Course#",

AVG(capacity)"Avg.Capacity",

ROUND(AVG(capacity))"Rounded Avg.Capacity"

FROM section

HAVING COUNT(*)=2

GROUP BY course_no

Nesting Aggregate Functions

Aggregate functions can be nested,as in the following example.The query returns the largest number of students that enrolled in an individual section.The COUNT function determines a count for all the sections,based on the GROUP BY clause,which lists SECTION_ID.When the MAX function is applied against this result,it returns12as the largest of the values.In other words,12 students is the largest number of students enrolled in an individual section.

SELECT MAX(COUNT(*))

FROM enrollment

GROUP BY section_id

MAX(COUNT(*))

-------------

12

1row selected.

Taking Aggregate Functions and Groups to the Next Level

Each of the SQL statements described so far in this chapter has focused on a single table.You will learn how to avoid potential pitfalls when joining tables and applying aggregate functions in Chapter8,“Subqueries.”

In Chapter17,you will learn about many additional aggregate and analytical functions,such as RANK,that allow you to analyze data even further.Some of this functionality helps you avoid the ORA-00979error through the use of a special analytical clause. Chapter17also introduces the ROLLUP and CUBE operators so that you can perform multilevel aggregations.

Lab6.2.Exercises

a)Show a list of prerequisites and count how many times each appears in the COURSE table.Order the result by the

PREREQUISITE column.

b)Write a SELECT statement that shows student IDs and the number of courses each student is enrolled in.Show

only those enrolled in more than two classes.

c)Write a SELECT statement that displays the average room capacity for each course.Display the average,

expressed to the nearest whole number,in another https://www.doczj.com/doc/de3994841.html,e a column alias for each column selected.

d)Write the same SELECT statement as in Exercise c,except consider only courses with exactly two sections.Hint:

Think about the relationship between the COURSE and SECTION tables—specifically,how many times a course

can be represented in the SECTION table.

Lab6.2.Exercise Answers

a)Show a list of prerequisites and count how many times each appears in the COURSE table.Order the result by the

PREREQUISITE column.

ANSWER:The COUNT function and GROUP BY clause are used to count distinct prerequisites.The last row of the result set shows the number of prerequisites with a null value.

SELECT prerequisite,COUNT(*)

FROM course

GROUP BY prerequisite

ORDER BY prerequisite

PREREQUISITE COUNT(*)

---------------------

101

205

...

3502

4201

4

17rows selected.

Nulls and the GROUP BY Clause

If there are null values in a column,and you group on the column,all the null values are considered equal.This is different from the typical handling of nulls,where one null is not equal to another.The aforementioned query and result show that there are four null prerequisites.The nulls always appear last in the default ascending sort order.

You can change the default ordering of the nulls with the NULLS FIRST option in the ORDER BY clause,as shown in the following statement.When you look at the result set,you see that the nulls are now first,followed by the default ascending sort order.

SELECT prerequisite,COUNT(*)

FROM course

GROUP BY prerequisite

ORDER BY prerequisite NULLS FIRST

PREREQUISITE COUNT(*)

---------------------

4

101

...

3502

4201

17rows selected.

b)Write a SELECT statement that shows student IDs and the number of courses each student is enrolled in.Show

only those enrolled in more than two classes.

ANSWER:To obtain the distinct students,use the STUDENT_ID column in the GROUP BY clause.For each of the groups,use the COUNT function to count records for each https://www.doczj.com/doc/de3994841.html,e the HAVING clause to include only those students

enrolled in more than two sections.

SELECT student_id,COUNT(*)

FROM enrollment

GROUP BY student_id

HAVING COUNT(*)>2

STUDENT_ID COUNT(*)

-------------------

1244

1843

...

2383

2503

7rows selected.

c)Write a SELECT statement that displays the average room capacity for each course.Display the average,

expressed to the nearest whole number,in another https://www.doczj.com/doc/de3994841.html,e a column alias for each column selected.

ANSWER:The SELECT statement uses the AVG function and the ROUND function.The GROUP BY clause ensures that the average capacity is displayed for each course.

SELECT course_no"Course#",

AVG(capacity)"Avg.Capacity",

ROUND(AVG(capacity))"Rounded Avg.Capacity"

FROM section

GROUP BY course_no

Course#Avg Capacity Rounded Avg Capacity

-----------------------------------------

101515

202020

2522.77777823

...

35021.66666722

4202525

4502525

28rows selected.

The SQL statement uses nested functions.Nested functions always work from the inside out,so the AVG(capacity)

function is evaluated first,and its result is the parameter for the ROUND function.ROUND’s optional precision

parameter is not used,so the result of AVG(capacity)rounds to a precision of zero,or no decimal places. Column Aliases in the GROUP BY Clause

Sometimes you might copy the columns from a SELECT list—with the exception of the aggregate function,of course—down to the GROUP BY clause.After all,cutting and pasting saves a lot of typing.You might then end up with an error such as the following one.The ORA-00933error message(“SQL command not properly ended”)may leave you clueless as to how to solve the problem.

SELECT course_no"Course#",

AVG(capacity)"Avg.Capacity",

ROUND(AVG(capacity))"Rounded Avg.Capacity"

FROM section

GROUP BY course_no"Course#"

/

GROUP BY course_no"Course#"

*

ERROR at line5:

ORA-00933:SQL command not properly ended

To resolve the error,you must exclude the column aliase“Course#”in the GROUP BY clause.

Column aliases are not allowed in the GROUP BY clause.

d)Write the same SELECT statement as in Exercise c,except consider only courses with exactly two sections.Hint:

Think about the relationship between the COURSE and SECTION tables—specifically,how many times a course

can be represented in the SECTION table.

ANSWER:The HAVING clause is added to limit the result set to courses that appear exactly twice.

SELECT course_no"Course#",

AVG(capacity)"Avg.Capacity",

ROUND(AVG(capacity))"Rounded Avg.Capacity"

FROM section

GROUP BY course_no

HAVING COUNT(*)=2

Course#Avg.Capacity Rounded Avg.Capacity

-------------------------------------------

1322525

1452525

1462020

23013.514

24012.513

5rows selected.

The COUNT(*)function in the HAVING clause does not appear as part of the SELECT list.You can include in the

HAVING clause any aggregate function,even if this aggregate function is not mentioned in the SELECT list. Lab6.2.Quiz

In order to test your progress,you should be able to answer the following questions.

1)Which column(s)must be included in the GROUP BY clause of the following SELECT statement?

SELECT NVL(MAX(final_grade),0),section_id,

MAX(created_date)

FROM enrollment

GROUP BY_______

______a)final_grade

______b)section_id

______c)created_date

______d)All three

______e)None of the above

2)You can combine DISTINCT and a GROUP BY clause in the same SELECT statement.

______a)True

______b)False

3)There is an error in the following SELECT statement.

SELECT COUNT(student_id)

FROM enrollment

WHERE COUNT(student_id)>1

_____a)True

_____b)False

4)How many rows in the following SELECT statement will return a null prerequisite?

SELECT prerequisite,COUNT(*)

FROM course

WHERE prerequisite IS NULL

GROUP BY prerequisite

______a)None

______b)One

______c)Multiple

5)Where is the error in the following SELECT statement?

SELECT COUNT(*)

FROM section

GROUP BY course_no

______a)There is no error.

______b)Line1.

03第三讲 吸声处理

噪声治理课程第三讲吸声处理 一、吸声 1.1 吸声系数与降噪系数 吸声是声波撞击到材料表面后能量损失的现象,吸声可以降低室内声压级。描述吸声的指标是吸声系数α,代表被材料吸收的声能与入射声能的比值。理论上,如果某种材料完全反射声音,那么它的α=0;如果某种材料将入射声能全部吸收,那么它的α=1。事实上,所有材料的α介于0和1之间,也就是不可能全部反射,也不可能全部吸收。 不同频率上会有不同的吸声系数。人们使用吸声系数频率特性曲线描述材料在不同频率上的吸声性能。按照ISO标准和国家标准,吸声测试报告中吸声系数的频率范围是100-5KHz。将100-5KHz的吸声系数取平均得到的数值是平均吸声系数,平均吸声系数反映了材料总体的吸声性能。在工程中常使用降噪系数NRC粗略地评价在语言频率范围内的吸声性能,这一数值是材料在250、500、1K、2K四个频率的吸声系数的算术平均值,四舍五入取整到0.05。一般认为NRC小于0.2的材料是反射材料,NRC大于等0.2的材料才被认为是吸声材料。当需要吸收大量声能降低室内混响及噪声时,常常需要使用高吸声系数的材料。如离心玻璃棉、岩棉等属于高NRC吸声材料,5cm厚的24kg/m3的离心玻璃棉的NRC可达到0.95。 测量材料吸声系数的方法有两种,一种是混响室法,一种是驻波管法。混响室法测量声音无规入射时的吸声系数,即声音由四面八方射入材料时能量损失的比例,而驻波管法测量声音正入射时的吸声系数,声音入射角度仅为90度。两种方法测量的吸声系数是不同的,工程上最常使用的是混响室法测量的吸声系数,因为建筑实际应用中声音入射都是无规的。在某些测量报告中会出现吸声系数大于1的情况,这是由于测量的实验室条件等造成的,理论上任何材料吸收的声能不可能大于入射声能,吸声系数永远小于1。任何大于1的测量吸声系数值在实际声学工程计算中都不能按大于1使用,最多按1进行计算。 在房间中,声音会很快充满各个角落,因此,将吸声材料放置在房间任何表面都有吸声效果。吸声材料吸声系数越大,吸声面积越多,吸声效果越明显。可以利用吸声天花、吸声墙板、空间吸声体等进行吸声降噪。 1.2吸声原理 纤维多孔吸声材料,如离心玻璃棉、岩棉、矿棉、植物纤维喷涂等,吸声机理是材料内部有大量微小的连通的孔隙,声波沿着这些孔隙可以深入材料内部,与材料发生摩擦作用将声能转化为热能。多孔吸声材料的吸声特性是随着频率的增高吸声系数逐渐增大,这意味着低频吸收没有高频吸收好。多孔材料吸声的必要条件是:材料有大量空隙,空隙之间互相连通,孔隙深入材料内部。错误认识之一是认为表面粗糙的材料具有吸声性能,其实不然,例如拉毛水泥、表面凸凹的石才基本不具有吸声能力。错误认识之二是认为材料内部具有大量孔洞的材料,如聚苯、聚乙烯、闭孔聚氨脂等,具有良好的吸声性能,事实上,这些材料由于内部孔洞没有连通性,声波不能深入材料内部振动摩擦,因此吸声系数很小。 与墙面或天花存在空气层的穿孔板,即使材料本身吸声性能很差,这种结构也具有吸声性能,如穿孔的石膏板、木板、金属板、甚至是狭缝吸声砖等。这类吸声被称为亥姆霍兹共振吸声,吸声原理类似于暖水瓶的声共振,材料外部空间与内部腔体通过窄的瓶颈连接,声波入射时,在共振频率上,颈部的空气和内部空间之间产生剧烈的共振作用损耗了声能。亥姆霍兹共振吸收的特点是只有在共振频率上具有较大的吸声系数。 薄膜或薄板与墙体或顶棚存在空腔时也能吸声,如木板、金属板做成的天花板或墙板等,这种结构的吸声机理是薄板共振吸声。在共振频率上,由于薄板剧烈振动而大量吸收声能。薄板共振吸收大多在低频具有较好的吸声性能。 二、吸声材料及吸声结构

图像处理课后习题

第一章绪论 1. 模拟图像处理与数字图像处理主要区别表现在哪些方面? (什么是图像?什么是数字图像?什么是灰度图像?模拟图像处理与数字图像处理主要区别表现在哪些方面?) 图像:是对客观对象的一种相似性的、生动性的描述或写真。 数字图像:一种空间坐标和灰度均不连续的、用离散数字(一般用整数)表示的图像。 灰度图像:在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做 “黑白照片”。 模拟图像处理与数字图像处理主要区别:模拟图像处理是利用光学、照相方法对模拟图像的处理。(优点:速度快,一般为实时处理,理论上讲可达到光的速度, 并可同时并行处理。缺点:精度较差,灵活性差,很难有判断能力和非线性处理能力) 数字图像处理(称计算机图像处理,指将图像信号转换成数字格式并利用计算机对数据进行处理的过程)是利用计算机对数字图像进行系列操作,从而达到某种预期目的的技术.(优点:精度高,内容丰富,可进行复杂的非线性处理,灵活的变通能力,一只要改变软件就可以改变处理内容) 2. 图像处理学包括哪几个层次?各层次间有何区别和联系? 数字图像处理可分为三个层次:狭义图像处理、图像分析和图像理解。狭义图像处理是对输入图像进行某种变换得到输出图像,是一种图像到图像的过程。 图像分析主要是对图像中感兴趣的目标进行检测和测量,从而建立对图像目标的描述,图像分析是一个从图像到数值或符号的过程。 图像理解则是在图像分析的基础上,基于人工智能和认知理论研究图像中各目标的性质和它们之间的相互联系,对图像内容的含义加以理解以及对原来客观场景加以解译,从而指导和规划行动。 区别和联系:狭义图像处理是低层操作,它主要在图像像素级上进行处理,处理的数据量非常大;图像分析则进入了中层,经分割和特征提取,把原来以像素构成的图像转变成比较简洁的、非图像形式的描述;图像理解是高层操作,它是对描述中抽象出来的符号进行推理,其处理过程和方法与人类的思维推理有许多类似之处。 3. 图像处理与计算机图形学的区别与联系是什么? 数字图像处理,是指有计算机及其它有关的数字技术,对图像施加某种运算和处理,从而达到某种预期的目的,而计算机图形学是研究采用计算机生成,处理和显示图形的一门科学。 二者区别:研究对象不同,计算机图形学研究的研究对象是能在人的视觉系统中产生视觉印象的事物,包括自然景物,拍摄的图片,用数学方法描述的图形等,而数字图像处理研究对象是图像;研究内容不同,计算机图像学研究内容为图像生成,透视,消阴等,而数字图像处理研究内容为图像处理,图像分割,图像透析等;过程不同,计算机图像学是由数学公式生成仿真图形或图像,而数字图像处理是由原始图像处理出分析结果,计算机图形与图像处理是逆过程。 结合每个人的本专业学科、工作应用,谈谈数字图像处理的关系或在本专业学科中的应用。 检测技术与自动化装置是把自动化、电子、计算机、控制工程、信息处理、机械等多种

进行识别前图像预处理

进行识别前图像预处理 //BP神经网络字符识别函数定义 #include "dibapi.h" #include <iostream> #include <deque> #include <math.h> using namespace std; typedef deque<CRect> CRectLink; typedef deque<HDIB> HDIBLink; //声明一些必要的全局变量 int w_sample=8; int h_sample=16; bool fileloaded; bool gyhinfoinput; bool gyhfinished; int digicount; int m_lianXuShu; CRectLink m_charRectCopy; CRectLink m_charRect; HDIBLink m_dibRect; HDIBLink m_dibRectCopy;

HDIB m_hDIB; CString strPathName; CString strPathNameSave; /********************************function declaration*************************************/ //清楚屏幕 void ClearAll(CDC* pDC); //在屏幕上显示位图 void DisplayDIB(CDC* pDC,HDIB hDIB); //对分割后的位图进行尺寸标准归一化 void StdDIBbyRect(HDIB hDIB, int tarWidth, int tarHeight); //整体斜率调整 void SlopeAdjust(HDIB hDIB); //去除离散噪声点 void RemoveScatterNoise(HDIB hDIB); //梯度锐化 void GradientSharp(HDIB hDIB); //画框 void DrawFrame(CDC* pDC,HDIB hDIB, CRectLink charRect,unsigned int linewidth,COLORREF color); //将灰度图二值化 void ConvertGrayToWhiteBlack(HDIB hDIB);

数字图像处理第三版第五章答案

第五章 一个带通滤波通过从相应的带阻滤波而获得: 然后: (a)理想带通滤波: (b)巴特带通滤波: (c)高斯带通滤波:

带阻滤波器公式可以通过带通滤波器的公式得到。两者的和为1. ),(1),(v u H v u H np nr -= 然后: (a) 理想带阻滤波: { 01),(= v u H 2.巴特带阻滤波: 我不想输这个公式了,这个就是下面的巴特带通滤波的公式中1减的后面那个式子 (b) 巴特带通滤波: 3.高斯带阻滤波: 我不想输这个公式了,这个就是下面的高斯带通滤波的公式中1减的后面中括号那个式子 (c)高斯带通滤波:

二维连续余弦函数的傅里叶变换 dxdy e y v x u A dxdy e v u f v u F vy ux j vy ux j )(200)(2)cos(),(),(+-+-????+==ππ 余弦的变换 )(2 1cos θθ θj i e e -+= 带入得到 ] [2][2][2 ),()(2)2/2/(2)(2)2/2/(2) (2)()(00000000??????+-+-+-++-+-+--=+- =dxdy e e A dxdy e e A dxdy e e e A v u F vy ux j y v x u j vy ux j y v x u j vy ux j y v x u j y v x u j πππππππππ 这些都是傅里叶变换的功能 并且 结果变换成 )]2,2()2,2([2),(0000π πδππδv v u u v v u u A v u F ++---- =即可

图像预处理的一般方法

图像预处理的一般方法 (一)空域图像增强技术 1.灰度线性变换 addpath('C:\'); I = imread('C:\lzs.jpeg'); imshow(I); I = double(I); [M,N] = size(I); for i = 1:M for j = 1:N if I(i,j)<=30 I(i,j)=I(i,j); else if I(i,j)<=150 I(i,j)=(210-30)/(160-30)*(I(i,j)-30)+30; else I(i,j)=(256-210)/(256-160)*(I(i,j)-160)+210; end end end end figure(2); imshow(uint8(I)); 2.直方图均衡化 addpath('C:\'); I=imread('C:\lzs.jpeg'); figure subplot(221); imshow(I);

subplot(222); imhist(I); I1=histeq(I); figure; subplot(221); imshow(I1); subplot(222); imhist(I1) 3.均值滤波 function test1 I = imread('C:\lzs.jpeg'); [M,N]=size(I); II1=zeros(M,N); for i=1:16; II(:,:,i)=imnoise(I,'gaussian',0,0.01); II1=II1+double(II(:,:,i)); if or(or(i==1,i==4),or(i==8,i==16)); figure;imshow(uint8(II1/i)); end end 4.梯度锐化操作 addpath('C:\'); I = imread('C:\lzs.jpeg'); subplot(131); imshow(I); H=fspecial('Sobel'); H=H'; TH=filter2(H,I); subplot(132); imshow(TH,[]);

化工制图-读工艺流程图、设备平面图、绘管道等

65 6-12 根据装配示意图查表拼画化工设备图 技术特性表 管 口 表 e 200 JB/T 81-1994 平面 排污口 d 200 JB/T 81-1994 平面 出料口 c 20 JB/T 81-1994 平面 排气口符号 公称尺寸 连接尺寸标准 连接面形式 用途或名称 a 450 HG21515-1995 人孔 b 200 JB/T 81-1994 平面 进料口设计温度 100 操作温度 40 物料名称 容器类别 I 1.5 腐蚀裕度/mm 焊缝系数 0.85 设计压力/MPa 常压工作压力/MPa 常压 作业指导书 一、 目的 (1) 掌握化工设备零部件的查表方法。(2) 掌握标准件的规定标记的书写方法。 (3) 熟悉化工设备图的包含的内容及表达方法。(4) 掌握化工设备图的作图步骤。二、 内容和要求 (1) 读懂装配示意图,了解所用化工设备标准件的类型, 在6-14、6-15中绘出标准零部件的图形,并标注尺寸,为 装配图的绘制作好准备。 (2) 由装配示意图,绘出储罐设备图。(3) A2图纸,横放,绘图比例自定。三、 注意事项 (1) 画图前看懂设备示意图及有关零部件图,了解设备的 工作情况及各零部件的装配连接关系。 (2) 综合运用化工设备图的表达方法确定表达方案。(3) 要合理布置视图及标题栏、明细栏、管口表、技术特 性表、技术要求。 (4) 参考书中焊缝图形,正确绘出焊缝图形。 姓名班级 学号

6-13 化工设备示意图 姓名学号

6-14 查表确定零件尺寸,作出图形并标注尺寸 姓名 班级 学号

6-15 查表确定零件尺寸,作出图形并标注尺寸 姓名学号

图像预处理的主要方案

图像预处理的主要方案 1引言模拟世界的影像要为计算机系统所处理和理解一般要经过图像采集、图像预处理、特征取样、匹配分析等阶段。由于获取图像的工具或手段的影响成像系统获取的图像即原始图像由于受到种种条件限制和随机干扰往往不能直接使用必须在视觉信息处理的早期阶段对原始图像进行灰度校正、噪声过滤等图像预处理使获取图像无法完全体现原始图像的全部信息。因此对图像进行预处理就显得非常重要。预处理的目的是改善图像数据抑制不需要的变形或者增强某些对于后续处理来说比较重要的图像特征。 图1图像处理的输入输出简图在图像分析中对输入图像进行特征抽取、分割和匹配前所进行的处理。图像预处理的主要目的是消除图像中无关的信息恢复有用的真实信息增强有关信息的可检测性和最大限度地简化数据从而改进特征抽取、图像分割、匹配和识别的可靠性。预处理过程一般有数字化、几何变换、归一化、平滑、复原和增强等步骤。 2数字化一幅原始照片的灰度值是空间变量位置的连续值的连续函数。在M ×N点阵上对照片灰度采样并加以量化归为2b个灰度等级之一可以得到计算机能够处理的数字图像。为了使数字图像能重建原来的图像对M、N和b值的大小就有一定的要求。在接收装置的空间和灰度分辨能力范围内M、N和b的数值越大重建图像的质量就越好。当取样周期等于或小于原始图像中最小细节周期的一半时重建图像的频谱等于原始图像的频谱因此重建图像与原始图像可以完全相同。由于M、N和b三者的乘积决定一幅图像在计算机中的存储量因此在存储量一定的条件下需要根据图像的不同性质选择合适的M、N和b值以获取最好的处理效果。 3几何变换用于改正图像采集系统的系统误差和仪器位置的随机误差所进行的变换。对于卫星图像的系统误差如地球自转、扫描镜速度和地图投影等因素所造成的畸变可以用模型表示并通过几何变换来消除。随机误差如飞行器姿态和高度变化引起的误差难以用模型表示出来所以一般是在系统误差被纠正后通过把被观测的图和已知正确几何位置的图相比较用图中一定数量的地面控制点解双变量多项式函数组而达到变换的目的。 4归一化使图像的某些特征在给定变换下具有不变性质的一种图像标准形式。图像的某些性质例如物体的面积和周长本来对于坐标旋转来说就具有不变的性质。在一般情况下某些因素或变换对图像一些性质的影响可通过归一化处理得到消除或减弱从而可以被选作测量图像的依据。例如对于光照不可控的遥感图片灰度直方图的归一化对于图像分析是十分必要的。灰度归一化、几何归一化和变换归一化是获取图像不变性质的三种归一化方法。 5平滑消除图像中随机噪声的技术。对平滑技术的基本要求是在消去噪声的同时不使图像轮廓或线条变得模糊不清。常用的平滑方法有中值法、局部求平均法和k近邻平均法。局部区域大小可以是固定的也可以是逐点随灰度值大小变化的。此外有时应用空间频率域带通滤波方法。 6复原校正各种原因所造成的图像退化使重建或估计得到的图像尽可能逼近于理想无退化的像场。在实际应用中常常发生图像退化现象。例如大气流的扰动光学系统的像差相机和物体的相对运动都会使遥感图像发生退化。基本的复原技术是把获取的退化图像gxy看成是退化函数hxy和理想图像fxy的卷积。它们的傅里叶变换存在关系GuvHuvFuv。根据退化机理确定退化函数后就可从此关系式求出Fuv再用傅里叶反变换求出fxy。通常把称为反向滤波器。实际应用时由

图像预处理流程

图像预处理流程: 系统功能的实现方法 系统功能的实现主要依靠图像处理技术,按照上面的流程一一实现,每一部分的具体步骤如下: 1原始图像:由数码相机或其它扫描装置拍摄到的图像; 2预处理:对采集到的图像进行灰度化、图像增强,滤波、二值化等处理以克服图像干扰; 3字轮定位:用图像剪切的方法获取仪表字轮; 4字符分割:利用字符轮廓凹凸检测定位分割方法得到单个的字符; 5字符识别:利用模板匹配的方法与数据库中的字符进行匹配从而确认出字符,得到最后的仪表示数。 2.3.1 MATLA B简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB 和Simulink两大部分。 MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple 并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以

直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 2.3.2 MATLAB的优势和特点 1、MATLAB的优势 (1)友好的工作平台和编程环境 MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。 (2)简单易用的程序语言 MATLAB是一种高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。 (3)强大的科学计算机数据处理能力 MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、

图像预处理技术

图像预处理 一般情况下,成像系统获取的图像(即原始图像)由于受到种种条件限制和随机干扰,往往不能在视觉系统中直接使用,必须在视觉信息处理的早期阶段对原始图像进行灰度校正、噪声过滤等图像预处理.对机器视觉系统来说,所用的图像预处理方法并不考虑图像降质原因,只将图像中感兴趣的特征有选择地突出,衰减其不需要的特征,故预处理后的输出图像并不需要去逼近原图像.这类图像预处理方法统称为图像增强.图像增强技术主要有两种方法:空间域法和频率域法.空间域方法主要是在空间域内对图像像素直接运算处理.频率域方法就是在图像的某种变换域,对图像的变换值进行运算,如先对图像进行付立叶变换,再对图像的频谱进行某种计算(如滤波等),最后将计算后的图像逆变换到空间域.本章首先讨论直方图修正方法,然后介绍各种滤波技术,其中,高斯平滑滤波器将作比较深入的讨论. 5.1直方图修正 许多图像的灰度值是非均匀分布的,其中灰度值集中在一个小区间内的图像是很常见的(图5.2(a )所示的对比度很弱的图像).直方图均衡化是一种通过重新均匀地分布各灰度值来增强图像对比度的方法.经过直方图均衡化的图像对二值化阈值选取十分有利.一般来说,直方图修正能提高图像的主观质量,因此在处理艺术图像时非常有用. 直方图修正的一个简单例子是图像尺度变换:把在灰度区间],[b a 内的像素点映射到 [,]z z k 1区间. 一般情况下,由于曝光不充分,原始图像灰度区间],[b a 常常为空间[,]z z k 1的子空间,此时,将原区间内的像素点z 映射成新区间内像素点'z 的函数表示为 z z z b a z a z k '()= ---+1 1 (5.1) 上述函数的曲线形状见图5.1(a).上述映射关系实际上将],[b a 区间扩展到区间[,]z z k 1上,使曝光不充分的图像黑的更黑,白的更白. 如果图像的大多数像素灰度值分布在区间],[b a ,则可以使用图5.1(b)所示的映射函数: ??? ????><≤≤+---='b z z a z z b z a z a z a b z z z k k 1 11 )( (5.2) 若要突出图像中具有某些灰度值物体的细节,而又不牺牲其它灰度上的细节,可以采用分段灰度变换,使需要的细节灰度值区间得到拉伸,不需要的细节得到压缩,以增强对比度,如图5.1(c)所示.当然也可以采用连续平滑函数进行灰度变换,见图5.1(d). 这一方法存在的问题是,当直方图被延伸后,所得到的新直方图并不均匀,也就是说,各灰度值所对应的像素数并不相等.因此,更好的方法应该是既能扩展直方图,又能使直方图真正地呈现均匀性.

化工制图CAD教程与开发(8)---工艺流程图绘制_GAOQS

第8章工艺流程图绘制^_^ ?本章导引 ?工艺流程图基础知识 ?工艺流程图的绘制 ---

本章导引 本章目录 本章目录^_^ ---

化工工艺流程图是用来表达整个工厂或车间生产流程的图样。它既可用于设计开始时施工方案的讨论,亦是进一步设计施工流程图的主要依据。它通过图解的方式体现出如何由原料变成化工产品的全部过程。化工工艺流程图的设计过程可以分为如下三个阶段: ^_^ ①生产工艺流程示意图; ②生产工艺流程草图; ③生产工艺流程图。 生产工艺流程图的设计或绘制过程是随着化工工艺设计的展开而逐步进行的。化工工艺设计是化工工程设计的主体,它是整个工程设计成败优劣的关键。就工艺设计而言,首先要进行的是生产工艺流程的设计。工艺流程设计是设计方案中规定的原则和主导思想的具体体现,也是下一步工艺设计和其他各专业设计的基础,即决定了以后工艺设计和其他专业设计的内容和条件。 生产工艺流程设计就是如何从原料通过化工过程和设备,经过化学或物理变化逐步变成需要的产品,即化工产品。在复杂的化工生产过程中,原料不是直接变成产品的,与此同时还会产生副产品、废渣、废液和废气等,有的副产品还要经过一些加工步骤才成为合格的副产品,而生产的三废又必须经过合格处理后才能抛弃和排放。因此,生产工艺流程的设计是一项非常复杂而细致的工作,除了极少数工艺流程十分简单外,都要经过反复推敲,精心安排,不断修改和完善才能完成。随着生产工艺流程设计的不断展开,就需要绘制生产工艺流程示意图、生产工艺流程草图和生产工艺流程图等。 ---

一般在编制设计方案时,生产方法和生产规模确定后就可以考虑设计并绘制生产工艺流程示意图了。有了工艺流程示意图就可以进行物料衡算、能量衡算以及部分设备计算,然后才可以进行生产工艺流程草图的设计及绘制。待设备设计 ^_^ 全部完成后,再修改和补充工艺流程草图,由流程草图和设备设计进行车间布置 8-1是乙苯生产的工艺流程图。 本章在介绍工艺流程图基本知识的基础上,着重讲述工艺流程图的组成内容、各部件的绘制方法或标注要求,如生产工艺流程图中设备如何表示、物料管线如何绘制、仪器仪表如何表示等。最后通过绘制一个具体实例,来说明整个工艺流程图的绘制方法和思路。 点击察看图8-1 乙苯生产的工艺流程图 ---

图像预处理方法

预处理就是在图像分析中,对输入图像进行特征抽取等前所进行的处理。输入图像 由于图像采集环境的不同,如光照明暗程度以及设备性能的优劣等,往往存在有噪声, 对比度不够等缺点。另外,距离远近,焦距大小等又使得人脸在整幅图像中间的大小和 位置不确定。为了保证人脸图像中人脸大小,位置以及人脸图像质量的一致性,必须对 图像进行预处理。图像预处理的主要目的是消除图像中无关的信息,滤除干扰、噪声, 恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征 抽取的可靠性? 人脸图像的预处理主要包括人脸扶正,人脸图像的增强,以及归一化等工作。人脸 扶正是为了得到人脸位置端正的人脸图像;图像增强是为了改善人脸图像的质量,不仅 在视觉上更加清晰图像,而且使图像更利于计算机的处理与识别。归一化工作的目标是 取得尺寸一致,灰度取值范围相同的标准化人脸图像 ⑷。 2.1几何规范化 由于图像在提取过程中易受到光照、 表情、姿态等扰动的影响,因此在识别之前需要 对图像做归一化的预处理⑷,通常以眼睛坐标为基准点,通过平移、旋转、缩放等几何仿射 变换对人脸图像进行归一化。因为人脸虽然是柔性的三维曲面,同一人脸因表情变化会有 差异,但相对而言人的两眼之间的距离变化不会很大,因此双眼的位置及眼距,就成为人脸 图像归一化的依据。 定位眼睛到预定坐标,将图像缩放至固定大小。通过平移、旋转、缩放等几何仿射变 换,可以对人脸图像做几何规范化处理,仿射变换的表达式为: 其中(u,v)表示输入图像中像素的坐标(x,y)表示输出图像中像素的坐标。将上式展开 可得 x a^u a ?1v a 31 y a^u a ?2v a 32 平移变换就是给图像中的所有点的坐标都加上 u 和v ,其变换表达式为 a ii a 12 0 [x,y,1] [u,v,1][a 2i a 31 a 22 0] a 32 1 (2-1) (2-2)

图像预处理方法

图像预处理方法 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

预处理就是在图像分析中,对输入图像进行特征抽取等前所进行的处理。输入图像由于图像采集环境的不同,如光照明暗程度以及设备性能的优劣等,往往存在有噪声,对比度不够等缺点。另外,距离远近,焦距大小等又使得人脸在整幅图像中间的大小和位置不确定。为了保证人脸图像中人脸大小,位置以及人脸图像质量的一致性,必须对图像进行预处理。图像预处理的主要目的是消除图像中无关的信息,滤除干扰、噪声,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取的可靠性. 人脸图像的预处理主要包括人脸扶正,人脸图像的增强,以及归一化等工作。人脸扶正是为了得到人脸位置端正的人脸图像;图像增强是为了改善人脸图像的质量,不仅在视觉上更加清晰图像,而且使图像更利于计算机的处理与识别。归一化工作的目标是取得尺寸一致,灰度取值范围相同的标准化人脸图像[4]。 几何规范化 由于图像在提取过程中易受到光照、表情、姿态等扰动的影响,因此在识别之前需要对图像做归一化的预处理[4],通常以眼睛坐标为基准点,通过平移、旋转、缩放等几何仿射变换对人脸图像进行归一化。因为人脸虽然是柔性的三维曲面,同一人脸因表情变化会有差异,但相对而言人的两眼之间的距离变化不会很大,因此双眼的位置及眼距,就成为人脸图像归一化的依据。 定位眼睛到预定坐标,将图像缩放至固定大小。通过平移、旋转、缩放等几何仿射变换,可以对人脸图像做几何规范化处理,仿射变换的表达式为: ]100][1,,[]1,,[323122 211211 a a a a a a v u y x = (2-1) 其中(u,v)表示输入图像中像素的坐标(x,y)表示输出图像中像素的坐标。将上式展开可得 32221231 2111u a x a v a u a y a v a ++=++= (2-2) 平移变换就是给图像中的所有点的坐标都加上u ?和v ? ,其变换表达式为 ]1 u 0100 01][1,,[]1,,[v v u y x ??= (2-3) 将图像中的所有点相对于坐标原点逆时针旋转θ角的变换表达式为 ]1 000cos sin 0sin cos ][1,,[]1,,[θθ θθ -=v u y x (2-4) 缩放变换既是将图像按给定的比例r 放大或缩小,当1>r 时图像被放大,当10<

图像预处理流程

图像预处理流程: 图2.2 图像预处理流程图 2.2 系统功能的实现方法 系统功能的实现主要依靠图像处理技术,按照上面的流程一一实现,每一部分的具体步骤如下: 1原始图像:由数码相机或其它扫描装置拍摄到的图像; 2预处理:对采集到的图像进行灰度化、图像增强,滤波、二值化等处理以克服图像干扰; 3字轮定位:用图像剪切的方法获取仪表字轮; 4字符分割:利用字符轮廓凹凸检测定位分割方法得到单个的字符; 5字符识别:利用模板匹配的方法与数据库中的字符进行匹配从而确认出字符,得到最后的仪表示数。

2.3.1 MATLAB简介 MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是矩阵实验室(Matrix Laboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 2.3.2 MATLAB的优势和特点 1、MATLAB的优势 (1)友好的工作平台和编程环境 MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB 的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。

图像预处理综述

《计算机视觉技术》作业 图像预处理综述 在图像信息输入系统获取原图像的过程中,由于所通过的传输介质的实际性能和接收设备性能的限制,不可避免地存在着外部干扰和内部干扰,因此所获得的图像通常都含有各种各样的噪声和畸变,大大影响了图像的质量。因此,在对图像进行分析之前,必须先对图像质量进行改善,通常采用图像增强的方法。 图像增强作为一种预处理技术,能使处理后的图像比原图像更适合于参数估计、图像分割和目标识别等后续图像分析工作。它不会考虑引起图像质量下降的原因,而是将图像中感兴趣的特征有选择的突出,并衰减不需要的特征。其主要目的有两个:一是改善图像的视觉效果,去除噪音,提高图像成分的清晰度;二是使图像变得更有利于计算机处理。因此,图像增强技术的研究是图像处理、计算机视觉和模式识别中的一项重要内容。 图像增强的方法一般分为空间域和变换域两大类。空间域方法通常都是先求取图像的灰度直方图,对灰度直方图处理后,求得映射函数,将原图像进行灰度映射。该类方法适用于对灰度级动态范围的控制,计算量较小,其中常用的是直方图均衡方法(HE)和平台直方图均衡方法(PE),具有一定的自适应性;而变换域方法是在图像的某个变换域中对变换系数进行处理,然后通过逆变换获得增强图像。直方图均衡化算法和降噪滤波法是图像增强空间域法中最常用的算法。 1 直方图均衡化算法 图像直方图均衡化是图像预处理中一种十分重要的分析工具,它能够反映数字图像的概貌性描述。例如:图像的灰度范围,灰度的分布,整幅图像的平均亮度和阴暗对比度等。直方图均衡化也叫直方图均匀化,就是把给定图像的直方图分布改变成均匀分布的直方图,它是一种比较常用的灰度增强算法。直方图有以下特点: 1) 直方图是一幅图像中各像素灰度出现频次的统计结果,它只反映图像中不同灰度值出现的次数,而不反映某一灰度所在的位置。 2) 任何一幅图像,都有惟一确定的与它对应的直方图,但不同的图像可能有相同的直方图。 3) 由于直方图是对具有相同灰度值的像素统计得到的,因此,一幅图像各子区的直方图之和就等于该图像全图的直方图。 直方图均衡化是把原始图像的直方图变换成均匀分布的形式,是以累计变换函数分布为基础的,从而产生一幅灰度级分布具有均匀概率密度的图像。它以概率理论作基础,运用灰度点运算来实现直方图的变换,从而达到图像增强的目的。 直方图均衡化算法如下: (1) 计算原始图像的所有灰度级k s ,0,1, ,1k L =-; (2) 统计原始图像各灰度级的像素数k n ; (3) 计算原始图像的直方图: ()()0,1,,1k k p k L n n s ==- (4) 计算原始图像的累计直方图:

数字图像处理第三版第五章答案

第五章 一个带通滤波通过从相应的带阻滤波而获得: 然后: (a )理想带通滤波: (b )巴特带通滤波: (c )高斯带通滤波: 带阻滤波器公式可以通过带通滤波器的公式得到。两者的和为 1. H n ,U,V) 1 H n p (U,V) 然后: (a) 理想带阻滤波: H(u,v), 其他 2.巴特带阻滤波: 我不想输这个公式了,这个就是下面的巴特带通滤波的公式中 1减的后面那个式子 (b) 巴特带通滤波: 3.高斯带阻滤波: 我不想输这个公式了,这个就是下面的高斯带通滤波的公式中 (c) 高斯带通滤波: D i (u,v) D °,或 D 2 ( u ,v ) D ° 1减的后面中括号那个式子

二维连续余弦函数的傅里叶变换 F(u,v) f (u,v)e j2 (ux vy)dxdy Acos(u0x v0y)e j2 (ux vy)dxdy 余弦的变换 1 cos (e i e J ) 2 带入得到 F(u,v) A [e J(Uox voy)e J(u°xvoy)]e J2(uxvy)dxdy A[ e J2 (u°x/2 v°y/2 )e J2 (ux vy)dxdy] A[ e J2 (u°x/2 v°y/2 )e J2 (ux vy)dxdy] 这些都是傅里叶变换的功能 并且 结果变换成 / u°v°u°v° F(u,v) [ (u -,v -) (u -,v -)]即可 2 2 2 2 2 从例子() 即因此 得出

这是一个持续的形式, 一个高斯密度方差 或者 减去的整体从无限数量的加上括号里面是1,因此 这个两个题的区别比较小,但是结果有区别,在书上没有找到吧两者 的答案都写上吧,英语的翻译版的估计大些, 解决这个问题的关键是要认识到下面给定的函数, 是的二阶导数(拉普拉斯算子)的功能(参见 3.6.2 节有关拉普拉斯算子) 即, 所以, 但是,我们知道 这里 因此,我们已经降低了计算的傅里叶变换的问题的高斯函数。从高斯傅立叶变换对的基本形式条目13的表中给出(附注(的x, 丫)和(u, v)的在本问题是反向的表中的条目), 所以我们有最终结果 这是一个简单的扩展的问题。其目的是为了熟悉维纳滤波的各种条 件,

图像处理课后习题

第一章绪论 1.模拟图像处理与数字图像处理主要区别表现在哪些方面? (什么是图像?什么是数字图像?什么是灰度图像?模拟图像处理与数字图像处理主要区别表现在哪些方面?) 图像:是对客观对象的一种相似性的、生动性的描述或写真。 数字图像:一种空间坐标和灰度均不连续的、用离散数字(一般用整数)表示的图像。 灰度图像:在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。在数字图像领域之外,“黑白图像”也表示“灰度图像”,例 如灰度的照片通常叫做“黑白照片”。 模拟图像处理与数字图像处理主要区别:模拟图像处理是利用光学、照相方法对模拟图像的处理。(优点:速度快,一般为实时处理,理论上讲可达到光的速度,并可同时并行处理。缺点:精度较差,灵活性差,很难有判断能力和非线性处理能力) 数字图像处理(称计算机图像处理,指将图像信号转换成数字格式并利用计算机对数据进行处理的过程)是利用计算机对数字图像进行系列操作,从而达到某种预期目的的技术.(优点:精度高,内容丰富,可进行复杂的非线性处理,灵活的变通能力,一只要改变软件就可以改变处理内容) 2.图像处理学包括哪几个层次?各层次间有何区别和联系? 数字图像处理可分为三个层次:狭义图像处理、图像分析和图像理解。 狭义图像处理是对输入图像进行某种变换得到输出图像,是一种图像到图像的过程。 图像分析主要是对图像中感兴趣的目标进行检测和测量,从而建立对图像目标的描述,图像分析是一个从图像到数值或符号的过程。 图像理解则是在图像分析的基础上,基于人工智能和认知理论研究图像中各目标的性质和它们之间的相互联系,对图像内容的含义加以理解以及对原来客观场景加以解译,从而指导和规划行动。 区别和联系:狭义图像处理是低层操作,它主要在图像像素级上进行处理,处理的数据量非常大;图像分析则进入了中层,经分割和特征提取,把原来以像素构成的图像转变成比较简洁的、非图像形式的描述;图像理解是高层操作,它是对描述中抽象出来的符号进行推理,其处理过程和方法与人类的思维推理有许多类似之处。 3.图像处理与计算机图形学的区别与联系是什么? 数字图像处理,是指有计算机及其它有关的数字技术,对图像施加某种运算和处理,从而达到某种预期的目的,而计算机图形学是研究采用计算机生成,处理和显示图形的一门科学。 二者区别:研究对象不同,计算机图形学研究的研究对象是能在人的视觉系统中产生视觉印象的事物,包括自然景物,拍摄的图片,用数学方法描述的图形等,而数字图像处理研究对象是图像;研究内容不同,计算机图像学研究内容为图像生成,透视,消阴等,而数字图像处理研究内容为图像处理,图像分割,图像透

图像预处理操作规范

2.2系统功能的实现方法 系统功能的实现主要依靠图像处理技术,按照上面的流程一一实现,每一部分的具体步骤如下: 1原始图像:由数码相机或其它扫描装置拍摄到的图像; 2预处理:对采集到的图像进行灰度化、图像增强,滤波、二值化等处理以克服图像干扰; 3字轮定位:用图像剪切的方法获取仪表字轮; 4字符分割:利用字符轮廓凹凸检测定位分割方法得到单个的字符; 5字符识别:利用模板匹配的方法与数据库中的字符进行匹配从而确认出字符,得到最后的仪表示数。 2.3.1MATLA B简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink 两大部分。 MATLAB是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 2.3.2MATLAB的优势和特点 1、MATLAB的优势 (1)友好的工作平台和编程环境

相关主题
文本预览
相关文档 最新文档