2016年12月22日 星期四

03360404 許淳翔, HW03

HW03:曲線運算

一.曲線做法:
1.畫曲線圖
2.建表
3.計算新直並存入表中
4.查表法

5.部分程式:

a.畫曲線:

我將它做成了一個函數,並且程式執行時,他就會先做一次。
預設成input 下界0 上界255, output 下界0 上界255 。
這樣子就會直就有原始的曲線顯示出來
這在每次更改輸入參數(edit)的時候都會呼叫一次,並把圖片更新。
即時的更新曲線,看起來就很有動感!!

並且假如輸出入上界下界的大小反過來時,會按4種(2*2)可能換線的顏色。
而當輸入的上界跟下界大小相反時,左右兩邊的橫線畫法會不同。
斜線最後在畫
//輸入大小沒反過來
if(iInMin <= iInMax)
{
Form1->Image18->Canvas->Pen->Color = clWhite ;
//輸出大小反過來
if ( iOutMin > iOutMax )Form1->Image18->Canvas->Pen->Color = clAqua ;
//畫線(橫線)
Form1->Image18->Canvas->MoveTo( 0 , 255-iOutMin ) ;
Form1->Image18->Canvas->LineTo( iInMin , 255-iOutMin ) ;
Form1->Image18->Canvas->MoveTo( iInMax , 255-iOutMax ) ;
Form1->Image18->Canvas->LineTo( 255 , 255-iOutMax ) ;
}
//輸入大小反過來
else if(iInMin > iInMax)
{
Form1->Image18->Canvas->Pen->Color = clYellow ;
//輸出大小反過來
if ( iOutMin > iOutMax )Form1->Image18->Canvas->Pen->Color = clPurple ;
//畫線(橫線)
Form1->Image18->Canvas->MoveTo( 0 , 255-iOutMax ) ;
Form1->Image18->Canvas->LineTo( iInMax , 255-iOutMax ) ;
Form1->Image18->Canvas->MoveTo( iInMin , 255-iOutMin ) ;
Form1->Image18->Canvas->LineTo( 255 , 255-iOutMin ) ;
}
//畫線(斜線)
Form1->Image18->Canvas->MoveTo( iInMin ,255- iOutMin ) ;
Form1->Image18->Canvas->LineTo( iInMax , 255-iOutMax ) ;

改變圖片時,要注意負像的能性!!

// 是否相反
if( iInMin > iInMax )
{
k = iInMin ;
iInMin = iInMax ;
iInMax = k ;
bInvers = true ;
}

//假如有負像的可能,就用255去減
for ( j = 0 ; j < 256 ; j++ )
{
if ( j <= iInMin )
X = iInMin - iInMin ;
else if ( j >= iInMax )
X = iInMax - iInMin;
else
X = j - iInMin;
//轉成負像
if ( bInvers )
iHistogram[j]  = 255-int( double ( X * ( iOutMax - iOutMin ) / ( iInMax - iInMin ) + iOutMin));
else
iHistogram[j]  = int( double ( X * ( iOutMax - iOutMin ) / ( iInMax - iInMin ) + iOutMin));
}

二.圖:

1.四種曲線輪流替換:
從四組對照實驗可以發現,其實根成法一樣,正正得正.......負負得正。
所以其是變化之後的可能也只有兩種,一是正像,二是負像。
最後負負的曲線是紫色,有點看不太清楚。

                                                   原圖:
 
                                                                 a.正正(輸出輸入正常)


                                                            b.反反(輸出輸入相反)
變化結果:
兩個的變化結果時一樣的



c.正反(輸出相反輸入正常)

                                                          d.反正(輸出正常輸入相反)
而他們的變化結果都是負像:


2.黑白畫:

原圖

只要將輸入上下界差一調整為1
EX(127,128)
這樣假如輸入小於127輸出就會變成0
輸入大於128輸出就會變成255
也就是只有最大跟最小兩種可能。
每種顏色都是0跟255兩種,總共2*2*2 = 8 種可能

                                                                  a.原圖轉黑白

灰階:


當先將圖片轉為灰階
再用上述方式變化圖片
他就真的只會剩下黑白兩色
b.灰階轉黑白



其實將輸入上界跟下界對調EX:(128,127)
這樣黑白兩色就會對調!!


三.感想:
介面用panel 固定會比較好看,且可以使用Align讓介面可以隨視窗大小移動。
曲線畫圖比質方圖簡單,就是當他的曲線輸入大小反過來的時候要記得換別種畫法。
假如沒有換他會變成Z字型的!!
一直調動曲線的參數,看著她一直變換還蠻好玩的。

用曲現有很多種可能的變化方式
光玩圖片就能打發很多時間喔~~
轉化過後使用質方圖統計會有趣喔~~

沒有留言:

張貼留言