2015年10月30日 星期五

02360156_鄭宇哲_直方圖與直方圖均化

關於我寫的程式,相當的簡單,如下圖
此為範本(來源:google搜尋  home.chosun.ac.kr)

程式執行成功後,點擊左邊的圖板變可讀進圖片或者左上角的File->Open,相當的人性化!!

而右方會顯示該圖的直方圖,此為一般直方圖,而此範本圖片為512*512 有262,144個點~
由於要計算最高值會有點麻煩,還要再花額外時間去做計算,我這邊就娶個大概的值去把它做簡單的縮放。

做到這邊基本上還沒有甚麼問題,不過之後再做均化的時候碰到了一些問題!!
就是均化後int不吃小數點 結果所顯示出來的值全部變為0,看到都傻了,不過之後我想到了一個方法就是先做"乘"的動作之後再做"除"的動作,就可以避免先除了之後數字都變為0,乘上去之後也是0的結果!!
雖然我記得老師是使用小數點double的樣子,不過似乎不用到這麼麻煩,把乘除的順序做個顛倒就可以達到那種效果了!!

以下是直方圖均化的後的圖片樣子:

右下角看到的是直方累積圖 
而右邊的直方圖變低是因為我正在測試其他式子來讓比例合適一些

圖片整個就是一個暖色系變為一般的照片個感覺!!
突然感到我也可以賣相機去拉~~
做這個作業的時候主要麻煩到我的就是直方圖的比例問題,還有做直方圖均化的小數點問題,第一個問題我就沒特別去解決,因為想到還要額外幾個迴圈去找出每一個直方圖的最大值,而第二個問題應該算是圓滿解決,就算前面計算沒用到小數點也沒差,因為顏色在BMP下255只能有整數所以差那1點顏色值的差距人眼看不出來的!!而且計算的精準也未必有良好的效果,但是個人認為最痛苦的事情就是...學校電腦真的真的好慢好慢,我真的很怕他當機...
趕快上傳弄一弄趕快結束這個恐怖的作業,改天在家裡下載BCB XE2好了,不然也做得很痛苦~ 不過這均化真的差好多,一個感覺就是兩張不同圖片,不過處理後有些相同顏色的點點變多了,似乎還是沒辦法把它完全變成正常顏色的圖片,也許是256*256*256個顏色無法表達全部的色彩吧,從這邊應該就是256色值的極限了,
對了...還有清除畫布的問題
Image2->Picture=NULL;
感謝柯明男提供!!

程式碼:點進來~~~

2015年10月29日 星期四

資工三乙 02360386 柯明男 HW2

作業內容:直方圖均化

影像直方圖:影像分成RGB,並且統計0~255 的數量

作法:

(畫布高度) / (統計出的最大值)  * (0~255的統計數量) 就是0~255 要畫出來的長度了。

程式碼:

        float 紅色基準點 = 128/float(紅色最大值);
        float 綠色基準點 = 128/float(紅色最大值);
        float 藍色基準點 = 128/float(紅色最大值);
        for(int i=0; i<256; i++)
        {
            //畫布大小為(128,128)
            //此處0.5 為 128/256
            Image5->Canvas->MoveTo(0.5*float(i),128);
            Image5->Canvas->LineTo  (0.5*float(i),128-紅色基準點*紅色直方圖[i]);
            Image6->Canvas->MoveTo(0.5*float(i),128);
            Image6->Canvas->LineTo  (0.5*float(i),128-綠色基準點*綠色直方圖[i]);
            Image7->Canvas->MoveTo(0.5*float(i),128);
            Image7->Canvas->LineTo  (0.5*float(i),128-藍色基準點*藍色直方圖[i]);
        }


圖片1.影像直方圖

直方圖均化:講影像色彩平均化拉開,進行對比度調整

作法:

將統計出來的直方圖作cdf轉成累積直方圖,再將 255 * (目前累積的量) / (累積的最大值) 
及為新的色彩值了。

程式碼:

        for(int i=1;i<256;i++)
        {
            //在這邊第255個值極為最大值
            新的紅色色彩值[i] = int(255*(float(累積紅色值[i])/累積紅色值[255]));
            新的綠色色彩值[i] = int(255*(float(累積綠色值[i])/累積綠色值[255]));
            新的藍色色彩值[i] = int(255*(float(累積藍色值[i])/累積藍色值[255]));
        }
        for(int j=0; j<iImageHeight; j++)
        {
            BYTE *bPtrImageRow = (Byte *)Image4->Picture->Bitmap->ScanLine[j];
            for(int i=0; i<iImageWidth; i++)
            {
                bPtrImageRow[3*i+0]=新的藍色色彩值[bPtrImageRow[3*i+0]];
                bPtrImageRow[3*i+1]=新的綠色色彩值[bPtrImageRow[3*i+1]];
                bPtrImageRow[3*i+2]=新的紅色色彩值[bPtrImageRow[3*i+2]];
            }
        }

 
圖片2.直方圖均化



 圖片3.處理後的直方圖

延伸問題:

ComboBox:

為了讓我可以隨時切換要看哪一個直方圖
所以我新增了一個 ComboBox 來做選單
而選單中的資料可以用 ComboBox1->Items->Add() 來新增
或者是在介面設計的地方 他的屬性裡面的Item也可以新增

 
圖片4.ComboBox新增List

程式碼及TImage宣告的的問題:

程式碼只要判斷ComboBox1->Text就可以只到使用者要看哪個圖的直方圖
    TImage *tempImage = new TImage(this);
    String ComboText=ComboBox1->Text;
    if (ComboText == "Image1" && Image2->Picture!=NULL)
        tempImage->Picture = Image2->Picture;
    else if(ComboText == "Image2" && Image4->Picture!=NULL)
        tempImage->Picture = Image4->Picture;

但是這裡會遇到一個問題 在compile的時候會出現
[Linker Error] Unresolved external '__fastcall Extctrls::TImage::TImage(Classes::TComponent *)' referenced from
並且停在TImage宣告的地方
上網查資料料之後發現,老師的Bloger裡面有解答: 點我

解決辦法: 
Project > Options > Packages >Runtime Packages中的
Build with Runtime Packages 的勾勾去掉 即可

圖片5.解決TImage宣告問題 

畫布得刷新:

因為不斷的重新畫直方圖但是3個畫布不會自動清空。

解決辦法:

1.     mage5->Canvas->Brush->Color= clWhite;
        Image5->Canvas->Rectangle( TRect(0, 0,128, 128)); 
此方法就是在畫布上面放一個白色的矩形
不過會因為pen的顏色的關係 會有個邊框在
結果辦法就是設定成 TRect(-1,-1,129,129)即可

2.     Image5->Picture=NULL; 
不過此方法會把一些基本的設定改掉 需要每次都重新設定畫筆大小及顏色
  

防呆設定:

防止使用者沒有載入圖片 新增了 bool bLoad; 當有載入就改成true
這樣只要判斷if (bLoad) 即可知道有沒有載入了
如果沒有載入則用 Application->MessageBox("圖片未載入","錯誤",0);
來提醒使用者 還沒有載入圖片。
MessageBox 相關指令網址: 點我
有沒有先做過直方圖再做均化 也可以用if來判斷。 


程式碼:點我

2015年10月15日 星期四

資工三乙 02360475 傅清毓 HW1

今天要介紹的影像處理APP是:Fused

這款APP它的功能比較特別一點
不是屬於修圖軟體,而是將兩張圖片整合在一起的軟體
用說的一定覺得這軟體沒什麼強大的地方
接下來就來看看實際使用的截圖吧!!!

此為APP開啟時的樣子,點選左下角以選擇背景圖

選好背景圖後,點選右下角選前景圖

這邊是選好之後的樣子,大家可能會覺得很一般,不就兩張圖片疊再一起嗎?
別急別急,接下來才是神奇的地方

此APP內建多種混和兩個圖片不同的演算法
可以疊出不一樣的感覺

像是這個效果就是讓他有電視機的效果

這邊我選擇了這個效果(個人比較喜歡

接著呢,可以用畫筆把不要的地方擦掉,如圖


最後再調整一下亮度


曝光值

還有對比

最後這就是成果拉~~~
有沒有覺得很美呢???


接下來本人我要犧牲一下自己
弄出一個比較特別比較嚇人的照片

一樣先選好前後景


選擇喜歡的效果

接著再把不要重疊的地方擦掉

最後調整一下對比,亮度,曝光



搭拉~~~就完成拉 
怎麼樣 
沒想到可以這麼嚇人吧




 使用心得:此APP裡面的功能老實說,都是一些一般修圖軟體裡面可以看到的效果
其實沒什麼特別的,像是:調整亮度、對比、曝光等等,但是只要使用者加上一點巧思跟創意就可以創造出讓人驚豔甚至是害怕的圖片喔!!


2015年10月14日 星期三

資工四乙01360114 黃戎歆 HW1

我今天要介紹的軟體叫做Aviary,它是一個相片編輯器

進入程式後,他會直接要求你選擇一張照片,選擇完後就會進入如下圖所示的編輯頁面

它擁有非常多種的相片效果強化或者是美化修改的功能,像是調亮暗、銳利度、加入額外的文字或圖片或者是一些它提供的效果特件等等。

下圖是我嘗試玩玩各種功能後所調整出來的圖,我有用到銳利度調整 、聚焦、背景模糊等等功能。


使用完這個軟體後,我覺得它的功能很多樣,而且還有很多效果功能都有額外套件可以下載,是個還蠻好用的相片編輯器。





資工三乙 02360822 王亞嶠 hw1

今天要介紹的修圖軟體是Enlight
Enlight來自知名的攝影app開發商Lightricks,而且他們也曾經推出了大受歡迎的人像美化 app Facetune

在開始,可以先將一張照片導入程式裡
可以直接拍攝,也可以從下面的相片庫裡選
而且從底部往上拉,就可以直接瀏覽整個相片庫


選好後畫面如上
旁邊有一排工具列
而且每一個裡面又有不同功能
接下來就大概把各個功能示範一下

第一個是版面
裡面又分裁切、傾斜、重製大小


裁切就是大眾所見的裁切相片
傾斜可以調整照片角度,可縱向也可橫向,上圖就是傾斜後的效果
如果在圖上向左或向右滑,還可以調整角度大小
重製大小是可以改變圖中物品的距離


上圖是重製大小的效果
可以用畫筆先畫出要固定不變的東西
在選取橫向或縱向來擠壓圖片
就會產生擠壓效果

下一個是圖像
裡面又分調節、清晰度、目標


調節就是比較常見的可以調光影與顏色,可手動選自己喜歡的效果
也可以向左向右滑來決定效果深淺
而下排有三個功能
選完效果後,可以在第二個、第三個工具選項中依照喜好調整細節


清晰度也有多種樣式可選,也可手動調整
  

目標就是以目標點為準,可以調半徑大小範圍來調節曝光等參數

然後再來是濾鏡
裡面又分類比、黑白、二重奏




二重奏的效果就是多形狀雙重漸變效果
可以選擇圓形擴散也可以線性漸變
也可手動調整範圍大小及拖動調整地方
詳細還可以調整透明度或改變漸變顏色

接下來的是工具
裡面有混合器、重塑、修復、傾斜位移


混合器就是可以合成多張照片,及調整合成照片的大小,可手動設置
重塑就是可以調整物體的膨脹或縮小和改變形狀


修復就是可以用遮蓋的方式將不想要的地方遮掉
他運用的是周圍類似色彩、背景來取代


傾斜位移是可以透過手動選取方式及挑整位置來造成模糊效果

接下來是藝術風格
裡面可以選擇繪畫、都市集、寫生畫面效果


每一個也有提供很多效果來選擇自己喜歡的效果


筆刷跟文字的功能就是用來美化圖片的


最後就是在完成選項裡可以選擇自己喜歡的邊框效果
也可以用成方形照片
或拼貼多張相片



這個程式貼心的地方是就算你不太會使用這些工具,首次使用時也會有教程
在初次點擊每一個工具時也會彈出一次「工具提示」
而且在每個功能裡,如果忘記怎麼用可以從上面標題處往下拉即可進入教程
方便初學者好上手
且每一步編輯也都能還原與恢復
Enlight是一個非常多功能的照片處理程式
以多數修圖程式來講,他擁有蠻專業的修圖美化功能