作者joehuang92 (++紅色世界++)
看板b95902HW
標題Re: [作業] 鋼彈
時間Sat Nov 4 00:50:46 2006
幫忙整理一下題目的意思...
作業的目的是要將圖片作一些特殊的處理,Input是任意一張(24bit)bmp點陣圖
而Output則是兩張處理過的圖片,一張是高斯模糊效果的,另一張則是輪廓線。
先說明一下前面的Code...
#include <stdio.h>
#include "bmp.h" /*助教給的headfile,放在code同一個資料夾就可*/
int main(void)
{
unsigned char *bytes; /*接圖的指標變數*/
BITMAPINFO *info; //file header /*圖片標頭檔的變數*/
int height; /*圖片高變數*/
int width; /*圖片寬變數*/
bytes=LoadDIBitmap("red.bmp", &info); /*讀入red.bmp,將標頭檔存入info*/
height=info->bmiHeader.biHeight; /*取得圖片高(單位pixel)*/
width=info->bmiHeader.biWidth; /*取得圖片寬(單位pixel)*/
/*在這裡做處理*/
SaveDIBitmap("out.bmp", info, bytes); /*把圖存回去*/
return (0);
}
題目的架構是把圖片分割成很多方格,寬width格,高height格,每格都代表圖片的
一個像素。從左下角向右數,分別為bytes[0],bytes[1],bytes[2]...,一列數完就
往上繼續數,最後一格(最右上角)應該會是bytes[height*width-1]。因為助教的幫忙
,圖片一進來就會是黑白的,每個bytes[i]會有一個0~255的值,由黑到白的灰階。
要把圖高斯模糊化,就把題目給定的矩陣M,中心的41對準任意一個像素,整個5X5的
矩陣應該會涵蓋以指定像素為中心的5X5方格(如果矩陣超過了圖片,把該處的顏色值
0)。大約會是類似的狀況:
000000000000000000000000
000000000000000000000000
00■■■■■■■■■■■■■■■■■■■■00
00■■■■■■■■■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■■■■00
00■■■□□☆□□■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■■■■00
00■■■□□□□□■■■■■■■■■□□□□□ ☆為指定的像素
00■■■■■■■■■■■■■■■■■□□□□□ □範圍是m矩陣
00■■■■■■■■■■■■■■■■■□□☆□□ ■範圍是圖像素
00■■■■■■■■■■■■■■■■■□□□□□ 0是矩陣可能超出的範圍
00■■■■■■■■■■■■■■■■■□□□□□
00■■■■■■■□□□□□■■■■■■■■00
00■■■■■■■□□□□□■■■■■■■■00
00■■■■■■■□□☆□□■■■■■■■■00
00■■■■■■■□□□□□■■■■■■■■00
000000000□□□□□0000000000
000000000000000000000000
對每個像素,將其涵蓋範圍的數值,分別乘以蓋上去矩陣的對應數值,並將其加總。
最後把加總的數值除以273,存回原來的指定像素裡。
如此,最後出來的圖應該會跟原來差不多但是比較模糊化。
成功的話,將其輸出成第一個成品。
然後,比較原圖根模糊化的圖,如果兩圖某像素的顏色值相差超過10,就把那個像素
的值改為255(白色),否則把值改為0(黑色)。
出來的成果應該會變成一張輪廓化的圖,黑底白線。
如果看不懂我說的東西可以私下敲我XD,祝大家周末鋼彈愉快。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.8.237
1F:推 jackychc:推薦這篇文章 11/04 01:55
2F:推 huichih:謝謝 11/04 10:41
3F:→ kevintpd:強者我同學 11/04 15:12
4F:推 locationc:範例中是哪個步驟將圖轉成灰階的? 11/04 21:21
5F:推 joehuang92:把圖讀進來的時候...(聽說是這樣) 11/04 21:40
6F:推 waterwinds:大推~同學你真是太讓人感動了>///< 11/05 11:31
7F:推 NTUSTKnight:TA豋場了嗎? 11/06 23:26
8F:推 fieryl:TA!? 難道我剛剛問的人是TA!? Orz 11/06 23:29