Translate

วันศุกร์ที่ 9 ตุลาคม พ.ศ. 2558

Image Processing : Histogram คืออะไร แล้วทำยังไงถึงจะได้ Histogram

Histogram คืออะไร

Histogram คือ
 กราฟแท่งในมุมมองของความถี่ โดยจะมีแกน Y เป็นแกนบ่งบอกความถี่ เพื่อให้เข้าใจง่ายขึ้น สมมุติมีนักเรียนในชั้นเรียนสอบได้เกรด A 3 คน, B 5 คน และ C 7 คน
จะได้ตารางข้อมูลความถี่ดังนี้

เกรด จำนวนนักเรียนที่สอบได้ (คน)
A 3
B 5
C 7

ซึ่งตารางดังกล่าวสามารถนำไปสร้างเป็น Histogram ได้ดังภาพ



แล้วเกี่ยวข้องยังไงกับ Image Processing
ถ้าเรานำความถี่ในแต่ละ Level ของแสงในภาพ มาสร้างเป็น Histogram จะทำให้เราทราบได้ว่าภาพนั้นมืด หรือสว่าง ในกรณีที่ภาพมีความืด Histogram จะมีแท่งกราฟค่อนไปทางซ้ายมือดังตัวอย่าง

ภาพที่นำมาดู Histogram

สังเกตุว่า Histogram จะค่อนไปทางซ้ายมือ เพราะจากภาพค่อนข้างมืด

ส่วนภาพที่ค่อนข้างสว่างนั้น จะมี Histogram ค่อนไปทางขวามือ

ใน Part ต่อไปเราจะนำ Histogram มาใช้ในการปรับปรุงภาพให้มีความคมชัดและความสว่างตามที่เราต้องการ


วันพฤหัสบดีที่ 8 ตุลาคม พ.ศ. 2558

Image Processing : การ Convert รูปภาพสีทั่วไปเป็น Gray Scale (Part 2)

การ Convert ภาพสีให้เป็นภาพแบบ Gray Scale โดยวิธี Weighted method or luminosity method

Weighted method or luminosity method

Link Part 1: http://babsoftsoft.blogspot.com/2015/10/image-processing-convert-gray-scale.html 

จาก Part ที่ 1 เราจะได้รู้จักวิธีการ Convert ภาพสีเป็นภาพแบบ Gray Scale ด้วยวิธี Average Method ไปแล้ว Part นี้เราจะทำการปรับปรุงภาพใหม่ เพื่อให้ภาพสว่างขึ้น จาก Part ที่แล้วเราได้ทราบไปแล้วว่า แสงสีแดงนั้นมีความยาวคลื่นมากที่สุด รองลงมาคือสีเขียวและน้ำเงินตามลำดับ สีแดงและสีเขียวนั้นค่อนข้างจะมีผลกับการมองเห็นภาพเรามาก

แสงสี
ความยาวคลื่น (nM.)
แดง
780 - 630


เขียว
560 - 490
น้ำเงิน
490 - 440



เราจึงปรับสูตรปุ๋ยใหม่ให้เป็น 30-59-11 เป็นสูตรเร่งใบ เจ้ย ไม่ใช่ๆๆ ปรับ Weight ของสี สูตรใหม่ที่ได้คือ

Pixel(x,y) = ( R*30 + G*59 + B*11 ) / 100

Pixel(x,y) = ตำแหน่งของ Pixel ณ ตำแหน่ง x , y
R = ระดับของแสงสีแดง
G = ระดับของแสงสีเขียว
B = ระดับของแสงสีน้ำเงิน

หลังปรับปรุงสูตรแล้วจะได้ภาพใหม่ที่ไฉไลกว่าเดิม

33-33-33

30-59-11

33-33-33


30-59-11

(Source https://i.worldwidewebhosting.com/iblog/wp-content/uploads/sites/5/2015/02/IMG_1122.jpg)
(Source http://www.lifeofintegrity.com/5-life-lessons-tree/)



Convert Gray Scale Code C#

ตัวอย่าง Source Code สามารถดาวน์โหลดได้ที่นี้
Link2: http://adf.ly/1PWL2X

Image Processing : การ Convert รูปภาพสีทั่วไปเป็น Gray Scale (Part 1)

วันนี้เราจะทำการ Convert ภาพสีให้เป็นภาพแบบ Gray Scale

Gray Scale คืออะไร

Gray Scale ก็คือภาพขาวดำ ที่แต่ละ Pixel จะแทนด้วยระดับสีต่างๆ โดยปกติภาพทั่วไปที่ประกอบด้วยแสง 3 แสง คือ Red Green Blue เพียง Pixel เดียว จะนำระดับแสงแต่ละ Channel มาผสมกัน แต่ในกรณี ภาพแบบ Gray Scale นั้น จะมีเฉพาะแสงสีขาวเท่านั้น

สมมุตถ้า 1 pixel นั้นแทนด้วยค่า 1 Byte (1 Byte คือ 8 บิต) เพราะฉะนั้น 1 Byte จะเก็บระดับแสงได้ 256 ระดับ

ระดับแสงของ Gray Scale 256 ระดับ


Gray Scale Average Method

ตามที่เราทราบไปข้างต้นว่าแต่ละ Pixel นั้น จะประกอบไปด้วยระดับของแสง R G B วิธีการที่ง่ายที่สุดในการ Convert ภาพสีเป็น Gray Scale นั้นคือการหาค่าเฉลี่ยออกมา สมการที่ได้คือ

Pixel(x,y) = (R+G+B)/3

Pixel(x,y) = ตำแหน่งของ Pixel ณ ตำแหน่ง x , y
R = ระดับของแสงสีแดง
G = ระดับของแสงสีเขียว
B = ระดับของแสงสีน้ำเงิน

เพราะฉะนั้น Weight ที่เราได้ออกมานั้นก็คือ R 33% , G 33% , B 33% (ยั่งกะสูตรปุ๋ย)

ตัวอย่างภาพที่ Convert เรียบร้อยแล้ว

ภาพต้นฉบับ

ภาพหลัง Convert สูตร 33-33-33

(ที่มาของภาพ : https://i.worldwidewebhosting.com/iblog/wp-content/uploads/sites/5/2015/02/IMG_1122.jpg )



จากปัญหาที่เกิดขึ้น ภาพจะค่อนข้างมืด ทำให้เราแยกรายละเอียดบางส่วนของภาพไม่ได้ ภาพจะกลายเป็นสีดำกลมกลืนไปทั้งหมด สาเหตุที่เกิดขึ้นเกิดจาก ความยาวคลื่น ของแสงแต่ละแสงนั้น มีไม่เท่ากัน ความยาวคลื่นของสีแดงจะยาวที่สุด และรองลงมาเป็นสีเขียวและน้ำเงินตามลำดับ การมองเห็นสายตาเมื่อปรับเป็นขาวดำแล้ว จึงจำเป็นต้องทำการ Weight ระดับของแสงแต่ละสีใหม่ 
ไว้ต่อกันที่ Part 2 นะครับ



วันเสาร์ที่ 3 ตุลาคม พ.ศ. 2558

MobileTest.me ตรวจสอบหน้าเว็บของเราบน Mobile Device

ตรวจสอบหน้าเว็บตัวเองว่าจะเป็นอย่างไรถ้าใช้ Mobile Device แต่ละตัว

Preview our page on each mobile device.

ถ้าคุณกำลังสงสัยว่าเว็บไซต์ที่คุณกำลังสร้างขึ้นมา เวลาไปอยู่ในอุปกรณ์ Smart Device จะมีหน้าตาเป็นอย่างไร วันนี้เรามีวิธีการตรวจสอบโดยไม่ต้องไปซื้ออุปกรณ์มาให้ครบทุกชิ้น

If you have any question about view your website when render on several smart device.We don't buy all that smart device. We can solve this problem.

คุณสามารถเข้าไปทดลอง Web Site ของคุณได้ที่ http://mobiletest.me
You can get view your web site at. http://mobiletest.me



เลือกวิธีการ Login ใช้งานระบบ ตามแต่สะดวก
Select your login method.



หลังจากนั้นให้ทำการกรอก URL ที่ต้องการทดสอบเข้าไปในช่อง
Enter your URL for test.




ทำการเลือก Device ที่ต้องการทดสอบ
Select Device you want to see.


หลังจากนั้นกดปุ่มสามเหลี่ยมเพื่อทำการทดสอบ
Click triangle button for test.




Preview หลังจากการกดปุ่ม
Preview will show you after click button.

SQL Pivot Table (English)

Make SQL Pivot Table


Pivot Table is result data table from transaction data is processed by Aggregate function (Ex. Sum, Avg, Max, Min) Pivot table is use for analyst each point of view. For easy to understand it. We see example now.



This structur table contains.
SellerName : Name of Seller.
InvoiceNO : No of invoice or bill.
InvoiceDate : Date of Invoice or bill.
Amount : Total circulation of Invoice.

Assume We have question is we look for sales volume of each seller and separate by month.
General query we maybe with WHERE MONTH(InvoiceDate) = 1 , WHERE MONTH(InvoiceDate) = 2 til complete And maybe use GROUP BY Together.

Example Query Month = 1 Only
SELECT SellerName,SUM(Amount) as Amount
  FROM InvoiceList
  WHERE 
  MONTH(InvoiceDate)=1

  GROUP BY SellerName 

View of report is not comfortable to analyst because we will use
several month table. For comfortable to analyst we should use PIVOT

Example Query Pivot 
SELECT * FROM
(SELECT MONTH(InvoiceDate) as Month, Amount ,SellerName 
FROM InvoiceList
) as SourceTable
PIVOT
(
SUM(Amount) for SellerName in (Dang,Dum,Jumpee,SreeDa)

) as PV



*** Next problem is null value on the table. Focus at month 1 of Dum It has Null because all of month 1 Dum not have circulation. If we use this query on program maybe found error. We can use ISNULL for improve our query.

SELECT Month 
, ISNULL(Dang,0) as Dang 
, ISNULL(Dum,0) as Dum 
, ISNULL(Jumpee,0) as Jumpee 
, ISNULL(SreeDa,0) as SreeDa 
 FROM
(SELECT MONTH(InvoiceDate) as Month, Amount ,SellerName 
FROM InvoiceList
) as SourceTable
PIVOT
(
SUM(Amount) for SellerName in (Dang,Dum,Jumpee,SreeDa)
) as PV

After Improve query...









SQL Pivot Table (ภาษาไทย)

การทำ SQL Pivot Table


Pivot Table คือตารางข้อมูลที่ได้มาจาก Transaction Data ผ่านกระบวนการใน Aggregate function อย่างเช่น Sum, Avg, Max และ Min ก็จะได้ตารางสรุปแต่ละแบบออกมา รูปแบบตารางที่ได้จาก Query นั้นจะเป็นรายงานที่นำไปใช้ในการวิเคราะห์ในแง่ต่างๆ ต่างจาก Query Transaction ปกติ เพื่อให้ง่ายต่อการทำความเข้าใจ เราไปดูตัวอย่างประกอบกันเลยครับ



จากตารางดังกล่าว ประกอบด้วย
SellerName : รายชื่อพนักขาย
InvoiceNO : เลขที่ใบขายสินค้า
InvoiceDate : วันที่ของใบขายสินค้า
Amount : ยอดขายในใบขายสินค้า

สมมุติเรามีโจทย์ว่า เราต้องการดูยอดขายของพนักงานขายแต่ละคน โดยแยกตามเดือน การ Query แบบทั่วไป
อาจจะต้อง Query โดยใช้ WHERE MONTH(InvoiceDate) = 1 
, WHERE MONTH(InvoiceDate) = 2  ไปจนครบ และจะต้องใช้ Group By ร่วมไปด้วย

ตัวอย่างการ Query เฉพาะยอดรวมของเดือนที่ 1
SELECT SellerName,SUM(Amount) as Amount
  FROM InvoiceList
  WHERE 
  MONTH(InvoiceDate)=1

  GROUP BY SellerName 

การแสดงผลอาจจะใช้ในการเปรียบเทียบค่อนข้างลำบาก เพราะต้องดูแบบแยกเดือน
เพื่อความสะดวกในการเปรียบเทียบรายงานจึงแนะนำให้ใช้การ PIVOT แทน

ตัวอย่างการ Query แบบ Pivot 
SELECT * FROM
(SELECT MONTH(InvoiceDate) as Month, Amount ,SellerName 
FROM InvoiceList
) as SourceTable
PIVOT
(
SUM(Amount) for SellerName in (Dang,Dum,Jumpee,SreeDa)

) as PV



Pivot ค่อนข้างจะมีประโยชน์ในแง่ของการวิเคราะห์ เช่น อยากทราบว่าในแต่ละเดือนพนักคนไหนจะมียอดขายสูงสุด

*** ปัญหาต่อมาคือ ถ้าไปใช้ใน code แล้วจะเห็นได้ว่า ในเดือนที่ 1 นาย Dum มีค่าเป็น Null เพราะ ไม่มียอดขายเลย เมื่อไปใช้ในโปรแกรมอาจจะเกิด Error ขึ้นได้ เพราะฉะนั้นเราจึงปรับปรุงโดยใช้คำสั่ง ISNULL 

SELECT Month 
, ISNULL(Dang,0) as Dang 
, ISNULL(Dum,0) as Dum 
, ISNULL(Jumpee,0) as Jumpee 
, ISNULL(SreeDa,0) as SreeDa 
 FROM
(SELECT MONTH(InvoiceDate) as Month, Amount ,SellerName 
FROM InvoiceList
) as SourceTable
PIVOT
(
SUM(Amount) for SellerName in (Dang,Dum,Jumpee,SreeDa)
) as PV

เมื่อ Query ก็จะได้ข้อมูลที่สมบูรณ์ตามรูปด้านล่างนี้


หวังว่าบทความนี้คงมีประโยชน์ไม่มากก็น้อยสำหรับโปรแกรมเมอร์นะครับ