2015年11月25日 星期三

資工四乙 01360114 黃戎歆 HW03

這次的作業看起來好像是蠻難的,但實際上在寫的時候並不會很難,主要是把公式帶入就能求出我們需要的值,再把它畫出來跟套用到圖上就好。

使用圖片的原圖

一開始要寫作業的時候,不知道為什麼我明明就只是把元件都拉好,也沒有不小心點到某個元件進入cpp內部,但是compiler的時候就一直跳出link error,後來就怒把XE2砍掉換成XE8就正常使用了。

Level:
             剛開始寫Level的時候我只有試著在畫布上把線畫出來而已,主要是在座標的部分弄了老半天,但後來各色彩值的調整由於只要套入公式就可以使用,在編寫上還蠻順利的,唯一有遇到的問題就是沒有加入overflow的判斷,導致一開始在測試的時候圖片看起來都怪怪的。

只有調整Input

Input和Output都有調整


Curve:
             Curve的部分寫起來感覺比Level簡單一些,玩起來也比較有趣,主要也是將公式套論就可以算出各色彩值的變化,但跟Level的差別在於Curve感覺只能對圖片調整大概而Level可以調整的比較細微。

曲線往上比較明亮

曲線往下比較暗

心得:
            熟悉C++ Builder後,寫程式的速度明顯有比上個作業快上許多,而這次的作業對圖片的調整造成更大的變化,寫完看到成果覺得還蠻有成就感的。







2015年11月23日 星期一

02360954 鄭欣怡 HW03



這次的作業為Photoshop的色階與曲線調整
會使用到以下兩個公式
色階調整公式:
iOutput=iOutputMin+(iInput-iInputMin)*(iOutputMax-iOutputMin)/(iInputMax-iInputMin)
曲線調整公式:
y=f(x)=(T-S)/(S-255S) x2+(1-255 (T-S)/(S-255S))x

首先將圖片載入















將色階的輸入、輸出上下界值訂好以後
會看到修改後的變化















做曲線調整利用公式來做顏色的轉換
顏色的範圍為0到255
需要用元件屬性的event裡MouseDown功能來觸發
這次的作業直接套用講義的公式大概就能做出來
不過變數類型宣告要改一下
不然曲線繪畫不出圖形







资工三甲 林呈钰 04362383 hw3

Level and Curve

1.level
通过手动输入改变iInputMin iInputMax iOutputMin iOutputMax 的值,去改变图片的暗亮度。
需要注意的一点是:原影像色阶低于iInputMin的部分要通过判断语句让它等于iOutputmin,而原影像高于iInputMax的部分要通过判断语句让它等于iOutputmax,程式码如下:



当然,如果四个edit内没有输入任何数字,就会遇到问题,这时我设置当某个edit框未输入任何数字的时候,默认为0或者255。


当iInputMin从0变为50时,按下Apply按钮就会看到下面的图比原图更暗。(因为是上次在教室写的作业,留下来的图没有太多,所以例图效果不一定很明显)

2.Curve
实现在曲线图上点任意点改变曲线来修改图片,当然就要实现image的MouseDown事件,关于抛物线函数系数和坐标关系赋值的部分,我在这里就不写了,就把新坐标带进去就能得到关系式:  a = X;
      b = 255 - Y;
      T = (float)(b - a) / (a*a - 255*a);
      S = (float)(1 - T*255)
当鼠标任意按下确定新坐标,就将X,Y值带入上面四个式子,改变Curve;
最后一步是赋值,从而改变了原影像。
   




心得:
1.level
这个功能比较容易,因为只要知道推导公式,将 iOldLevel和iNewLevel 的赋值过程处理好,就可以了。只要上课听了老师将这个知识点和班上同学成绩水平类比的例子就能掌握这一知识;
2.curve
我也是在做作业的过程中突然领悟到 curve的大小要是255长度的正方形,而不能随意定。
为了让新坐标按下时明显一点我问了老师要怎么把点画出来,其实就是在X,Y附近坐标画一个圆再用颜色填充:
     Image3->Canvas->Pen->Color=clRed;
Image3->Canvas->Ellipse(X-4,Y-4,X+4,Y+4);
Image3->Canvas->Brush->Color=clRed;
Image3->Canvas->FloodFill(X,Y,clRed,fsBorder);
其实这个作业我用的时间比上一个作业直方图均化还要快,因为我类比这两个作业,编程式的整体思路是一样的:
       通过特定的公式设定新的值,然后遍历影像每个点赋值给原图像,在refresh图像就能实现功能。
当然这两个作业还都要求对画布的掌握要熟练!~
第一节课学的将图片反色的那三个回圈的知识,一直用到现在,其实真的是百变不离其中,只要懂本质,作业做起来真的不难,思路清晰了也就做的很快。










2015年11月22日 星期日

資工三乙 02360475 傅清毓 HW03

本次作業是要實作出色階與曲線調整圖片的顏色,首先是色階,改變輸出入的最大最小值,然後用比例的方式去算出圖片的輸出值,另外一個功能就是用二次曲線的方式去調整圖片的顏色,以上兩個功能知道原理之後實作起來都不難,以前還不知道原理的時候會覺得PHOTOSHOP是一套功能很強的軟體,但是現在已經學過了不少功能的實作,有些功能都可以舉一反三去實做出來,而且曲線調整可以優化成點數+1次曲線然後透過公式去算出曲線的式子再推回去。
實際的運用色階調整可以讓圖片較黑跟較白的地方變成更黑更白,也可以把比較不鮮豔的圖片調整為較為鮮艷的圖片,而曲線調整可以讓圖片變成更有層次感,如下圖。
以下為我的程式執行畫面
如果將輸入的範圍調成比原本的小,圖片暗的地方會更暗亮的地方會更亮
 而如果把輸出的範圍調成比輸入的小則會造成鮮豔度下降的樣子
 而曲線這邊如果是凹向上的二次曲線會讓圖片整體變暗但是最亮的地方不變
 如果是凹向下的二次曲線則會讓整體變更亮

2015年11月21日 星期六

資工四甲 01360912 陳奕穎 HW03

因為我有兩位教授不與學校一起考期中考,而是另外選時間考,所以我直到這星期二 (11/17/2015) 期中考才算結束,然後我從星期三開始做這個作業,加上寫這個部落格,花了我大概三天半的時間。

在期中考前,我還沒著手做這作業,我有看 PPT,以為我已經懂了 ,可是沒有實際動手推導過一次公式,結果我就在本科的期中考上得到了一次慘痛的教訓──被扣了十幾分有關這個作業的題目,期中考結束後,我著手做這個作業,當然就有動筆推導過一次公式,才發現原來我對這個章節的公式推導完全理解錯誤! 
我一直以為 Input、Output 的公式是一樣的,以為我們只是在把它們做結合,整合成一個比較方便的公式,但他們完全是相反的公式在做結合與推導。

在實作方面,有一個問題讓我非常困擾,那就是如果你用 autosize 雖然可以顯示出完整的照片,但是照片會很大一張,然後 Form 就要拉很大一個,一開始我的解決方案是用小畫家照原圖比例去縮放成比較小的照片,不過這太愚蠢了,後來我發現將 XE2 裡 TImage 元件的 Stretch 這個屬性打勾 (如下圖),這樣就能顯示完整圖,又能調整圖片的大小。

Stretch在這裡



然後,我莫名其妙的在畫 Level 的圖時卡關很久,我不知道我一開始在想甚麼,明明就只要像學弟說的分三段畫就好了 (這次又是參考學弟的想法了......),我一開始卻想用跟畫 Curve 一樣,一點一點的畫,這樣就算了,我的腦袋那時候就好像是鬼打牆,一直想不出怎麼一點一點的畫,我在猜可能是因為這次我要製作的 Level 、Curve 圖的寬跟高都要重新計算比例,我的內心很厭惡這個動作,所以自動中止思考,不管如何,我竟然花了大概兩天左右的時間在想這個明明理解公式後就會是很簡單的東西,真是太不應該了,成果如下圖。

未調整

調整後

再來是 Curve ,Curve 這部分在弄懂了 Level 後,就會覺得都是一樣的東西,不過就是套用的公式不同,不過我也花了一天的時間在這上面,原因是為了將 Curve 與 Level 整合在一起,我本來也是想分開用,但是教授說可以整合在一起而且我看到 PhotoShop 上面真的是合在一起的,還弄得超酷的,所以我也想試試看,其中比較麻煩的點大概就是,該如何知道曲線 
y = ax^2 + bx + c 
 a、b、c 的係數為何吧! 我後來是用高中的克拉瑪公式來求得這三個係數的,怎麼使用? 簡單說就是將 (iInputMin , iOutPutMin) 、 (iInputMax , iOutPutMax)、 (點按的 X , 點按的 Y) 當作參數帶入 y 函式就會得到三元一次聯立方程式,就能用克拉瑪公式了! 
求出係數後,就跟一般 Curve 是同樣的做法了,還有一點值得注意,那就是帶入的使用者點按的 Y 值,要記得他是從左上角開始算的,所以要先用 Y = imCurve->Height - Y ,再把 Y 帶入,不然就會發生跟我一樣,一直以為是克拉瑪公式算錯,可是怎麼檢查就是沒錯,後來才發現是在這個小地方錯了,結果如下圖。

這是一般 Curve

這是 Level 未加 Curve

這是 Level 加 Curve
結論 :
          PhotoShop 不愧貴為修圖神器,我只不過是做它其中微乎其微一項功能,就令我如此頭疼,而且說實話,雖然我是將 Level 與 Curve 整合在一起了,但是還是有許多 bug 尚待修正,舉例來說,如果你先調 Level 再調 Curve 那它不會有任何的問題,顯示的就像我預想的一樣,不過你要是調過了 Curve 再調 Level 就會顯示不正確的圖,還有 iInputMin > iInputMax 時,會顯示成很奇怪的圖,看來我的學習之路還很漫長。

修正 :
         剛剛在寫部落格寫到結論時,我突然想到我的 bug 是出在哪裡,出在因為我的 Curve 會用到使用者點按的 X、Y 的値,而因為要計算 y = ax^2 + bx +c 要把 Y = imCurve->Height - Y ,只調 Curve 或先調 Level 再調 Curve 不會發生問題是因為每次都會有新的 X、Y 值,但是反過來就會出現大問題了,X 還沒關係,Y 則每次調 Level 就會進行一次 
Y = imCurve->Height - Y
當然就有會問題囉! 
而 iInputMin > iInputMax 時會出現奇怪的圖依舊無解,PhotoShop 的解決方法是不讓使用者能輸入
iInputMin > iInputMax 的値。

2015年11月19日 星期四

資工四甲 01360203 陳劭融 HW02

作業二

首先這是原圖


接下來是統計了這張圖片的RGB色彩值並畫成直方圖與累積直方圖,可以看到這張圖在高數值的地方較為稀少


最後一張是進行直方圖均化後的圖片,整個圖片跟原圖比起來稍微亮了一點


心得:
        這次的作業在修改對照片進行修改的部分其實沒有太大的問題,反而是在畫直方圖的時候出了比較多的狀況,不過都只是一些小錯誤,很快就把它解決掉了。

資工三乙 02360822 王亞嶠 hw3

這次作業是要利用色階與曲線來調整圖片做變化
我放了兩張圖好來對照圖片變化前和變化後的差別
這次作業覺得比較方便的地方就是可以套公式帶入
而公式就是講義上有教到的
可以直接拿來用!

下面是設計版面的原圖


下張是用色階調整的效果


下兩張是用曲線調整的效果 


在做曲線調整時
一開始忘了要用MouseDown的功能
一直喬不定要放什麼小工具才能利用它來做變化
找了範本才發現要用MouseDown的功能
而且還不能隨便亂用在任何Image上
不然寫對了怎麼按也不會動

打完程式後一開始發現曲線怎麼點都不能跑
回去檢查也的確是在我要的Image上設定的MouseDown
後來看了很久才發現
計算完的那兩個值不能用int來宣告
要用float來宣告
改完後就很順利地可以動了

做完後真的覺得
曲線調整的公式雖然就這一條來套用
但自己算結果雖然簡單
用程式做起來真的是一大功夫.....
做完有錯不是計算過程錯
而是一些無法注意的小細節
真的會要找很久

2015年11月18日 星期三

資工三乙 02360386 柯明男 HW3

作業內容:Level & Curve

PageControl:

因為不想把之前的東西刪掉,所以新增了PageControl,做分頁的動作。 
圖片1.新增分頁
如果想要修改分頁名稱,要先點想要修改的分頁,然後按框框內的部分,在從屬性caption修改。

圖片2.修改分頁名稱

Level: 藉由縮小輸入輸出的最小最大值,來增加圖片的對比或是縮小。

作法:我是用最大和最小值的改變進而去修改圖片和畫圖,4個事件用同一個就可以了。
 圖片3.新增事件

會遇到的問題: 

1.當框框內的沒有任何值

2.當框框內的值不是數字

解決程式碼:

寫個function判斷,如果不是數字就回傳false
bool CheckTextIsNum()
{
    String str[4];
    str[0]=Form1->Edit1->Text;
    str[1]=Form1->Edit2->Text;
    str[2]=Form1->Edit3->Text;
    str[3]=Form1->Edit4->Text;
    for(int i=0;i<4;i++)
        if(str[i].Length()==0) return false;//判斷是不是空白
    for(int i=0;i<4;i++)
    { 
     //String陣列開始是1喔!! 我這裡大概卡了20分鐘QQ
     for(int j=1;j<=str[i].Length();j++)
        {
            if(str[i][j]<48 || str[i][j]>57)
            return false;
        }
    }
    return true;
}

3.畫圖

基本上沒有甚麼太大的問題,就是分3段畫。
程式碼: 
if(CheckTextIsNum())
    {
        inputmin=StrToInt(Edit1->Text);
        inputmax=StrToInt(Edit2->Text);
        outputmin=StrToInt(Edit3->Text);
        outputmax=StrToInt(Edit4->Text);
        if(inputmin>=0 && inputmax>inputmin && outputmin>=0 && 
           outputmax>outputmin && inputmax<=255 && outputmax<=255)//判斷 max<min
        {
            Image8->Canvas->Rectangle( TRect(-2, -2,257, 257));
            Image8->Canvas->MoveTo(0,255-outputmin);
            Image8->Canvas->LineTo(inputmin,255-outputmin);
            Image8->Canvas->LineTo(inputmax,255-outputmax);
            Image8->Canvas->LineTo(255,255-outputmax);
            meiwunti=true;
        }
    }

4.圖片看起來怪怪的

因為算出來有可能會overflow所以要加判斷
程式碼:
         for(int i=0;i<255;i++)
        {
            newcolor[i] = outputmin+(i-inputmin)*(((float)outputmax-outputmin)
                                  /(inputmax-inputmin))+0.5;
            if(newcolor[i]<0)newcolor[i]=0;
            if(newcolor[i]>255)newcolor[i]=255;
        }

成果:

 圖片4.成果

Curve:利用曲線修改圖辨的顏色。

會遇到的問題:

1. 按Image不能啟動事件

解決方法:enable改成true
另外我得事件是用: OnMouseDown
 圖片5.解決不能啟動事件

2.曲線畫出來怪怪的

因為左下角是(0,255) 所以Y=255-Y
程式碼:
    Y=255-Y;
    float a=(float)(Y-X)/(X*X-255*X);
    float b=1-255*a;
    for(int i=0;i<255;i++)
    {//有可能會overflow
        newcolor[i]=a*i*i+b*i+0.5;
        if(newcolor[i]<0)newcolor[i]=0;
        if(newcolor[i]>255)newcolor[i]=255;
    }
    Image9->Canvas->MoveTo(0,255);
    for(int i=1;i<255;i++)
    {//畫曲線的部分就是一小段一小段畫就好
        Image9->Canvas->LineTo(i,255-newcolor[i]);
    }

成果 

圖片6.成果

程式碼:點我

2015年11月15日 星期日

資工三乙 02360475 傅清毓 HW02


這次的作業是實作直方圖均化,要做的方法就是先統計每個顏色的個數,然後把他的累積直方圖做出來,之後再做成累積直方圖,接著把RGB每個顏色的累積個數除以RGB的各個總數,這個值就代表此之前所包含的顏色出現的機率,最後再把每個RGB的顏色都去乘上那個機率就完成了。

直方圖均化在圖片顏色分布不均的時候比較有效果,例如下面我載入的這張圖,非常的陰暗,但是經過直方圖均化之後,就會把影像的顏色平均,讓顏色不要集中在某一部份,這樣眼睛就可以分辨出物件了,對於比較鮮豔或者顏色已經很平均的圖片就不怎麼明顯了。

此技術可以應用在監視系統上面,如果晚上太暗導致錄影出來的圖片太暗不明顯,此時就可以將視訊的每個FRAME都做直方圖均化這樣一來就可以讓影片比較容易分辨物件了。

以下是我程式的範例:
 圖一:先載入一張較陰暗的圖片

 圖二:接著把統計直方圖顯示出來,可以看出來顏色分布非常的不平均
幾乎都很偏暗色系。
圖三:做完值方圖均化之後圖片明顯變清楚了。

2015年11月5日 星期四

資工四甲 01360841 王世權 HW2


這幾次上課有點混
這次作業做得有點艱辛
這次碰到最大的問題就是他需要累積密度函數
程式碼參考了別人的之後還是看不太懂
索性直接用了
均化的直方圖有顯示出來
但是圖片不知道為什麼沒變
均化大致上就是使圖片變得比較柔和(反過來就是銳利)
是很常見的一個功能
讓我明白了數學的重要性......


資工四甲 01360770 張軒睿 HW2

首先先附上程式執行畫面

第一張圖為載入原始圖片後之直方圖
第二張圖是進行均化之後的圖片和直方圖

從直方圖來看均化有執行
RGB都變得更均衡了
但不知道為什麼圖片看起來完全沒變...

這次遇到的問題主要有三個
1.Undefined OpenPicturedialog
經過google和研究投影片之後才發現
原來是忘了拉dialog元件...
不過就因為這個錯誤太基本反而卡住了整整一個小時
一直以為是程式哪裡出錯還重建了好幾次專案
這跟之前在寫程式時常常忘記寫using namespace std
於是把整個程式砍掉重寫有異曲同工之妙....

2.Scanline out of index
一樣上網google,看到大家說scan值不可以大於圖片大小於是改了好幾次值
結果一樣都無法執行
後來請老師幫忙檢查程式碼才發現原來是我沒把圖片的長寬存進去
但在修改後程式還是無法正常執行
換一張圖片之後就可以了
老師提醒我看圖片的詳細資料並告訴我這個程式只能使用深度為24的bmp圖片
原本以為可以讀進去的檔案就可以執行
沒想到還有這樣的問題需要注意

3.至今尚未解決的均化後圖片顯示
不管怎麼改圖片都會顯示一模一樣的原圖...

資工四甲 01360556 林韋儒 HW1

今天要介紹的影像處理APP:PLIXIR EXPRESS
此APP有非常多的預設樣式給您使用,只需動動手指便能讓您在手機上也能輕鬆的處理影像。
1.此APP的初始畫面

 2.隨便選取一張你想修改的圖片
 3.即可對你剛才所選的圖片進行處理此張圖片明顯地看的出來與原圖有所不同
(這是用了特效->Soft->Hans此效果)
4.除了處理圖片的顏色外,還能在圖片裡增加一些小樣式例如:螢光線條、煙火
螢光線條:(這是用了疊加->Default->Beep此效果)
煙火:(這是用了疊加->Fireworks->Fever此效果)


5.還能增加有圖案的邊框以及圖片外圍的樣式
落葉邊框:(這是用了邊框->Nature->Zinia此效果)
外圍:(這是用了邊框->Squared->Girlaroid此效果)


6.當然還能增加擁有特效的文字
文字:(這是用了字型->Grunge->第7個效果)
7.也能夠對圖片進行對比、模糊、平滑.....等等的調整
對比:(這是用了調整->對比->對比度100)


使用心得:當初想處理圖片時,意外的找到此軟體,不但功能多效果好,讓您輕鬆修圖,介面也很簡單不會讓使用者看得非常的眼花撩亂,最重要的是能夠免費使用,除了有手機板APP外還有網頁版的讓使用在手機或PC上都能使用,所以我大力推薦此軟體。