Just a Computer Graphics Studio & My Life

為了做研究,我必須製作整個色彩空間,想以RGB立體」的方式來產生,然而只能以「平面」的方式顯示在螢幕上,於是我寫了三維映射到二維的程式來實現~

產生色彩空間 Create Color Space

程式將會產生4096×4096PNG(無損壓縮格式)檔案(8.07MB),不過為了節省我寶貴的部落格空間,我將影像縮小並轉存為1024×1024JPG(有損壓縮格式)檔案(120KB)。有興趣的人就去跑我的程式來取得整個色彩空間圖吧:)~

整個色彩空間以RGB為例,三個維度256x256x256,總共需要256*256*256=16777216像素,映射到二個維度需4096*4096=16777216像素。我可是調到三更半夜才順利產生出這張圖呢!

/**
	Theme: Create Color Space
	compiler: Dev C++ 4.9.9.2
	Library: OpenCV 2.0
	Date: 101/01/21
	Author: HappyMan
	Blog: https://cg2010studio.wordpress.com/
*/
#include <cv.h>
#include <highgui.h>
#include<iostream>
using namespace std;

struct intColor
{
	long int blue;
	long int green;
	long int red;
	int number;
};
intColor cube[256][256][256] = {0};

int main()
{
    IplImage *Image1;

    //二維:4096*4096=16777216
    //三維:256*256*256=65536*256=16777216
    CvSize ImageSize = cvSize(4096, 4096);
    Image1 = cvCreateImage(ImageSize, IPL_DEPTH_8U, 3);
	int count1=0; //判斷色彩重複個數
	int count2=0; //判斷色彩不重複個數
	for(int n=1; n<=16; n++){
	    for(int i=0; i<Image1->height; i++){
	        for(int j=((Image1->widthStep)/16)*(n-1); j<((Image1->widthStep)/16)*n; j=j+3){
	            Image1->imageData[i*Image1->widthStep+j] = i%256;// blue
	            Image1->imageData[i*Image1->widthStep+j+1] = (j/3)%256;// green
	            Image1->imageData[i*Image1->widthStep+j+2] = (i+4096*(n-1))/256;// red
	            if(cube[i%256][(j/3)%256][(i+4096*(n-1))/256].number == 0){
	            	cube[i%256][(j/3)%256][(i+4096*(n-1))/256].number++;
					count2++;
	            	//system("pause");
				}
	            else{
					count1++;
	            	//system("pause");
				}
	    	}
	    }
	}
    cout<<count1<<endl;
    cout<<count2<<endl;
    cvNamedWindow("Whole Color Space",1);
    cvShowImage("Whole Color Space",Image1);
    cvSaveImage("Whole Color Space.png",Image1);

    cvWaitKey(0);

    cvReleaseImage(&Image1);
    cvDestroyWindow("Whole Color Space");

    return 0;
}

為了確認是否漏掉計算色彩像素,或是重複計算色彩像素,宣告兩個計數變數來紀錄次數,跑出來的結果無疑是:

0
16777216

之所以產生「正方形」整個色彩空間圖,是因為我要以當前最夯的影像社群APP—Instagram為實驗對象,它以正方形限制影像架構,為了「竊取」它的濾鏡效果,我只好「委曲求全」XD~

不過實驗結果顯然失敗,雖然是早已知道的結果,我還是要試驗我的演算法能做到怎樣的程度。

儘管實驗失敗,依然徹底去瞭解為何失敗,原因全寫在Instagram濾鏡這篇文章囉~

Advertisements

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: