2012-04-16 104 views
-3

我需要爲此問題構建代碼。照片Vignette刪除工具(Jython,Python)

  1. 首先,我們需要了解孤立的小插圖看起來像什麼,沒有一個美麗場景的混亂。爲此,獲得均勻照明的單一顏色的平坦表面的圖片(諸如在白天期間的白色牆壁或純藍色天空)並且將其用作「暈影輪廓」。您將得到以下小插曲配置文件圖像。

    在此圖像中,朝向圖像中心的像素具有比遠離中心的像素更高的RGB值(即 更亮的像素)。圖像也是黑色的,因此任何給定像素的紅色,綠色和藍色值都是相同的。您不得修改此圖片 。

  2. 我們需要使用步驟#1中的小插曲配置文件圖像作爲我們的相機拍攝的普通照片 的過濾器,以便可以刪除小插圖。爲此,您需要用暈影輪廓圖像分割 照片圖像(帶小插圖)。作爲暈影圖像中的像素具有RGB值是較小的(更暗)朝向其邊緣,由一個小的數除原始圖像的對應像素將使它們更亮

這些是提示

提示1:這需要您逐個像素地對圖像執行操作。即你不能一步到位。提示2:對於每個通道,第一個挑戰將是保持各分區的RGB值在0-255範圍內,因爲有效的RGB值介於0(最暗)和255(最亮)之間。


編輯:

示例代碼:

def runA1(picture): myFile = pickAFile() picture = makePicture(myFile) 

myFile2 = pickAFile() 
picture2 = makePicture(myFile2) 


for x in range(0,getWidth(picture)): 
    for y in range(0,getHeight(picture)): 
     px = getPixel(picture,x,y) 
     color = getColor(px) 
     color = makeLighter(color) 
     setColor(px,color) 

for x in range(2,getWidth(picture)): 
    for y in range(2,getHeight(picture)): 
     px = getPixel(picture,x,y) 
     color = getColor(px) 
     color = makeDarker(color) 
     setColor(px,color) 



show(picture2) 
+0

你能告訴我們你試過了什麼,或者考慮過嘗試嗎?有什麼特別的東西卡在你身上?就目前而言,除了「請給我完整的解決方法,我的作業問題」之外,您的問題並沒有說明您需要哪些幫助。 – 2012-04-16 08:11:01

+0

-1;投票結束。 – 2012-04-16 08:58:47

+1

沒有人爲你做你的功課,你必須拿出關於具體問題的具體問題。懶得學習不算! – hochl 2012-04-16 09:11:48

回答

2

因爲我們還沒有證明你已經嘗試在自己的任何東西,我只是去給提示,以什麼你應該試試。

  1. 考慮表示爲三個整數,0-255單個像素,在形式(R,G,B)。來自暈影蒙版的相應像素的值爲A,再次爲0-255。將(R,G,B)除以A乘以255以獲得未暈影像素(RR,GG,BB)。 (爲什麼我們需要乘以256?)

  2. 決定你要做什麼約R,G,B值超過255。如果暈影值A爲零,會發生什麼情況?

  3. 對圖像中的每個像素執行此操作,從頂部行像素開始,從左到右,然後下一行,等等,直到完成。


順便說一下,這種事情與一流的數字矩陣支持語言一步操作 - 說MATLAB,八度,與NumPy/SciPy的。這裏有一個MATLAB例如:

processed_image = original_image ./ repmat(vignette_image,[1 1 3]) * 256 

編輯2:

你的示例代碼一些評論:

  1. 你的縮進是錯誤的 - 這個代碼將無法運行。當你將它粘貼到StackOverflow中時,可能會發生錯誤。請修復它。特別是,

    • def聲明必須在自己的行上。
    • myFile2 =....必須從def:語句縮進。
  2. myFile1,myFile2 - 這些變量名稱可能更有意義。 (哪一個是原始照片?哪一個是小品面具?你可以嘗試調用這些變量original_filevignette_file代替。同上,用於myPicture1myPicture2。)

  3. 哪裏是在你的代碼中的註釋?很難說出你的代碼是做什麼的。

除此之外,您需要發表更多的代碼。你的例子需要是Short, Self Contained, Correct Example。現在你的代碼示例不是獨立的,因爲要運行它,我們還需要getPixel(),getColor(),makeLighter()等功能。由於縮進錯誤,它也不可編譯。

+0

我試圖製作一個程序...但它看起來不正確... – user1335799 2012-04-16 08:31:36

+0

我很確定它是不對。但答案一定是這樣的。 DEF runA1(圖片): MYFILE = pickAFile() 圖片= makePicture(MYFILE) myFile2 = pickAFile() 圖片2 = makePicture(myFile2) 在範圍X(0,的getWidth(圖片)) : 在範圍Y(0,的getHeight(圖片)): PX = getPixel(圖片,X,Y) 顏色=的getColor(PX) 顏色= makeLighter(顏色) 的setColor(PX,顏色) 嗒嗒blah blah – user1335799 2012-04-16 08:35:49

+0

你還沒有告訴我們。 *向我們展示你嘗試過的東西。 (將代碼粘貼到原始問題中,[注意爲StackOverflow正確格式化。](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)。)那麼也許我們可以幫助糾正*你的*代碼,以便它能夠正常工作。 – 2012-04-16 08:35:59