Dalam Image Processing, untuk melakukan proses binarisasi, filtering data, dan lain-lain, akan dibutuhkan informasi tentang nilai pixel dari suatu citra. Posting ini akan memberikan contoh program dengan menggunakan java, untuk mendapatkan nilai RGB dari satu pixel pada citra.
import java.io.*; import java.awt.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; public class GetPixelColor { public static void main(String args[]) throws IOException{ File file= new File("smile.jpg"); BufferedImage image = ImageIO.read(file); // Getting pixel color by position x=100 and y=40 int clr= image.getRGB(100,40); int red = (clr & 0x00ff0000) >> 16; int green = (clr & 0x0000ff00) >> 8; int blue = clr & 0x000000ff; System.out.println("Red Color value = "+ red); System.out.println("Green Color value = "+ green); System.out.println("Blue Color value = "+ blue); } }
Note: silahkan ganti nama file citra yang akan digunakan nanti, dan pastikan citra tersebut ada dalam satu directori dengan program ini.
Posting ini tulisan ulang dari rose india.
mas, mau nanya nih.. image processing yg saya buat, satu image saya deteksi masing2 R, G, dan B nya, yaitu seperti berikut:
process_red = new int[width * height];
counter = 0;
for(int i = 0; i < 256; i++)
{
for(int j = 0; j > 16;
red = (0xFF <<24)|(red<<16)|(red<<8)|red;
process_red[counter] = red;
counter++;
}
}
process_green = new int[width * height];
counter = 0;
for (int i = 0; i < 256; i++)
{
for(int j = 0; j > 8;
green = (0xFF <<24)|(green<<16)|(green<<8)|green;
process_green[counter] = green;
counter++;
}
}
process_blue = new int[width * height];
counter = 0;
for(int i = 0; i < 256; i++)
{
for(int j = 0; j < 256; j++)
{
int clr = buff_blue.getRGB(j,i);
int blue = clr & 0x000000ff;
blue = (0xFF <<24)|(blue<<16)|(blue<<8)|blue;
process_blue[counter] = blue;
counter++;
}
}
kemudian, setelah itu 3-3 nya harus saya gabungkan lagi. boleh dibantu ngga mas, gimana cara menggabungkan ketiganya? terima kasih banyak sebelumnya.
koreksi utk red elemen:
process_red = new int[width * height];
counter = 0;
for(int i = 0; i 16; j++
{
red = (0xFF <<24)|(red<<16)|(red<<8)|red;
process_red[counter] = red;
counter++;
}
}
hmmm… Saya belum mengerti betul dengan pertanyaan yang dimaksud. Klo boleh saya menebak :D, kamu ingin mengambil nilai Red, Green dan Blue dari citra utuh. Klo itu yang dimaksud, baru saja sy buat tulisan di sini: https://windupurnomo.wordpress.com/2011/01/08/mendapatkan-nilai-rgb-dalam-citra/
terima kasih mas utk responnya. hmmm… maksud pertanyaan saya lebih tepatnya menghitung frequensi red, green, dan blue. jadi dr citra utuh akan muncul 3 citra dimana:
citra 1 terdiri dari red elemen saja
citra 2 terdiri dari green elemen saja
citra 3 terdiri dari blue elemen saja
untuk kemudian masing2 citra tersebut diberi nilai threshold dan diaplikasi proses binarisasi utk mendapat tepi2 citra. setelah ketiga citra didapatkan tepinya, 3 binari citra tersebut akan digabung untuk mendapatkan 1 binary citra saja. sejauh ini saya rasa yg saya lakukan sudah benar, hanya saja saya mengalami masalah untuk display citra yg terakhir (setelah proses penggabungan). kalo mas tidak keberatan boleh tolong di-cek mas dimana kekurangan yg membuat citra tsb tidak bisa dimunculkan http://www.daniweb.com/forums/post1435970.html#post1435970. terima kasih banyak sebelumnya.
mas,,saya d tlongin yah….sy menggunakn aplikasi TCS 230 sebagai sensor warna n sy trmasuk msh baru mnggunkn TCS 230 n bru mo bljr,,yg sy mo tnykn gmn cr membwt programx kbtuln sy mnggunkn BHS C n sy udh mndptkn nilai dr frewkuensi msg2 RGB,,sy mndptkn referensi pemrogrmn bhsa c yg mnggunkn bhs c apkh program trsebut jg sm…yaitu sprti brikut:
016 Chip type : ATmega8535
017 Program type : Application
018 Clock frequency : 11.059200 MHz
019 Memory model : Small
020 External SRAM size : 0
021 Data Stack size : 128
022
023 S0 dan S1 5 volt
024 S2=0 ; S3=0 -> filter merah
025 S2=0 ; S3=1 -> filter biru
026 S2=1 ; S3=0 -> filter clear
027 S2=1 ; S3=1 -> filter hijau
028 *****************************************************/
029
030 #include
031 #include
032 #include
033 #define redref (27795/255)
034 #define greenref (33066.7/255)
035 #define blueref (34720/255)
036
037 // Alphanumeric LCD Module functions
038 #asm
039 .equ __lcd_port=0x15 ;PORTC
040 #endasm
041 #include
042
043 // Declare your global variables here
044
045 unsigned char lcd_buffer[33];
046 unsigned int count, red, green, blue,a=0,b=0,c=0;
047 float periode, frekuensi;
048
049 void red_filter()
050 {
051 PORTA.5=0;
052 PORTA.6=0;
053 for(a=0; a<=5; a++)
054 {
055 while(PINB.1 == 0){}
056 while(PINB.1 == 1){}
057 }
058
059 while(PINB.1 == 0)
060 {
061 count++;
062 }
063
064 while(PINB.1 == 1)
065 {
066 count++;
067 }
068
069 periode = ((float)count*0.0000014400921658986175115207373271889);
070 frekuensi = ((float)1/periode);
071 red = (frekuensi/redref);
072
073 count=0;
074
075 }
076
077 void green_filter()
078 {
079 PORTA.5=1;
080 PORTA.6=1;
081 for(b=0; b<=5; b++)
082 {
083 while(PINB.1 == 0){}
084 while(PINB.1 == 1){}
085 }
086
087 while(PINB.1 == 0)
088 {
089 count++;
090 }
091
092 while(PINB.1 == 1)
093 {
094 count++;
095 }
096
097 periode = ((float)count*0.0000014400921658986175115207373271889);
098 frekuensi = ((float)1/periode);
099 green = (frekuensi/greenref);
100
101 count=0;
102
103 }
104
105 void blue_filter()
106 {
107 PORTA.5=0;
108 PORTA.6=1;
109 for(c=0; c<=5; c++)
110 {
111 while(PINB.1 == 0){}
112 while(PINB.1 == 1){}
113 }
114
115 while(PINB.1 == 0)
116 {
117 count++;
118 }
119
120 while(PINB.1 == 1)
121 {
122 count++;
123 }
124
125 periode = ((float)count*0.0000014400921658986175115207373271889);
126 frekuensi = ((float)1/periode);
127 blue = (frekuensi/blueref);
128
129 count=0;
130
131 }
132
133 void main(void)
134 {
135 // Declare your local variables here
136
137 // Input/Output Ports initialization
138 // Port A initialization
139 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
140 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
141 PORTA=0x00;
142 DDRA=0xFF;
143
144 // Port B initialization
145 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
146 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
147 PORTB=0x02;
148 DDRB=0x00;
149
150 // Port C initialization
151 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
152 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
153 PORTC=0x00;
154 DDRC=0x00;
155
156 // Port D initialization
157 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
158 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
159 PORTD=0x00;
160 DDRD=0x00;
161
162 // Timer/Counter 0 initialization
163 // Clock source: System Clock
164 // Clock value: Timer 0 Stopped
165 // Mode: Normal top=FFh
166 // OC0 output: Disconnected
167 TCCR0=0x00;
168 TCNT0=0x00;
169 OCR0=0x00;
170
171 // Timer/Counter 1 initialization
172 // Clock source: System Clock
173 // Clock value: Timer 1 Stopped
174 // Mode: Normal top=FFFFh
175 // OC1A output: Discon.
176 // OC1B output: Discon.
177 // Noise Canceler: Off
178 // Input Capture on Falling Edge
179 // Timer 1 Overflow Interrupt: Off
180 // Input Capture Interrupt: Off
181 // Compare A Match Interrupt: Off
182 // Compare B Match Interrupt: Off
183 TCCR1A=0x00;
184 TCCR1B=0x00;
185 TCNT1H=0x00;
186 TCNT1L=0x00;
187 ICR1H=0x00;
188 ICR1L=0x00;
189 OCR1AH=0x00;
190 OCR1AL=0x00;
191 OCR1BH=0x00;
192 OCR1BL=0x00;
193
194 // Timer/Counter 2 initialization
195 // Clock source: System Clock
196 // Clock value: Timer 2 Stopped
197 // Mode: Normal top=FFh
198 // OC2 output: Disconnected
199 ASSR=0x00;
200 TCCR2=0x00;
201 TCNT2=0x00;
202 OCR2=0x00;
203
204 // External Interrupt(s) initialization
205 // INT0: Off
206 // INT1: Off
207 // INT2: Off
208 MCUCR=0x00;
209 MCUCSR=0x00;
210
211 // USART initialization
212 // Communication Parameters: 8 Data, 1 Stop, No Parity
213 // USART Receiver: On
214 // USART Transmitter: On
215 // USART Mode: Asynchronous
216 // USART Baud rate: 9600
217 UCSRA=0x00;
218 UCSRB=0x18;
219 UCSRC=0x86;
220 UBRRH=0x00;
221 UBRRL=0x23;
222
223 // Timer(s)/Counter(s) Interrupt(s) initialization
224 TIMSK=0x00;
225
226 // Analog Comparator initialization
227 // Analog Comparator: Off
228 // Analog Comparator Input Capture by Timer/Counter 1: Off
229 ACSR=0x80;
230 SFIOR=0x00;
231
232 // LCD module initialization
233 lcd_init(16);
234
235 count=0;
236 PORTA=0b10011000;
237
238 while (1)
239 {
240 // Place your code here
241 red_filter();
242 delay_ms(50);
243 green_filter();
244 delay_ms(50);
245 blue_filter();
246 delay_ms(50);
247 lcd_gotoxy(0,0);
248 lcd_clear();
249 sprintf(lcd_buffer,"R:%d G:%d B:%d",red,green,blue);
250 lcd_puts(lcd_buffer);
251 a=0; b=0; c=0;
252 };
253 }
dn gmn cra memasukn nilai F dr RGBnya???tlong d bles ya mas atas bntuannya sya sngt brtrm ksh blsx gpp d krim d email indy_burex@yahoo.com
Mas mau tanya :
kenapa klu red itu di slalu shift kanan dengan nilai 16 ??
int red = (clr & 0x00ff0000) >> 16;
kenapa klu green itu slalu di shift kanan dengan nilai 8 ??
int green = (clr & 0x0000ff00) >> 8;
kenapa klu blue itu tidak di shift kanan ??
int blue = clr & 0x000000ff;
Makasih mas..
mas,, saya mau tanya mas.. dri koding mas diatas,, saya masih belum mengerti dengan yang ini.
int red = (clr & 0x00ff0000) >> 16;
int green = (clr & 0x0000ff00) >> 8;
int blue = clr & 0x000000ff;
kira2 maksud dari koding ini gmana ya mas? knpa red itu >> 16, trus green itu >> 8 ?
maksih mas sbelumnya.
mas saya mau tanya , bagaimana caranya menampung nilai hasil binerisasi ke dalam 1 array 2D dengan height ny sebagai jumlah gambar dan weidht nya sebagai nilai pixel … terima kasih