lucy5222 發表於 2018-5-3 14:37:03

有關於像素處理的問題

大家好
請問各位這是一個AMG8833的熱影像 他讀出來的值為溫度而我把他轉為矩陣的形式
如何把矩陣中的每個數做運算(將8*8的矩陣轉為3*3再來做運算)相關的程式如下
而這是我的問題(溫度梯度)

#include <Wire.h>
#include <Adafruit_AMG88xx.h>

Adafruit_AMG88xx amg;

float pixels;

void setup() {
    Serial.begin(9600);
    Serial.println(F("AMG88xx pixels"));

    bool status;
   
    // default settings
    status = amg.begin();
    if (!status) {
      Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
      while (1);
    }
   
    Serial.println("-- Pixels Test --");

    Serial.println();

    delay(100); // let sensor boot up
}


void loop() {
    //read all the pixels
    amg.readPixels(pixels);

    Serial.print("[");
    for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
      Serial.print(pixels);
      Serial.print(", ");
      if( i%8 == 0 ) Serial.println();
    }
    Serial.println("]");
    Serial.println();

    //delay a second
    delay(1000);
}

超新手 發表於 2018-5-3 15:22:36

float B;
void EtoT(int m, int n) {
for (int i = 0 ; i < 3 ; i++) {
    int x = m + i;
    if (x > 7) x = 7;
    else if (x < 0) x = 0;
    for (int j = 0 ; j < 3 ; j++) {
      int y = n + j;
      if (y > 7) y = 7;
      else if (y < 0) y = 0;
      B = pixels;
    }
}
}
呼叫 EtoT,
使用 m, n 去指定是要那一個 3x3 陣列
結果會放在 B 陣列中
例如 EtoT(0, 0) 或 EtoT(7, 7) 或 EtoT(0,7)
或是 EtoT(-1, -1)

lucy5222 發表於 2018-5-7 10:19:12

不好意思 可以請你說明再清楚一點嗎 謝謝 三個疑問

超新手 發表於 2018-5-7 10:31:00

你的三個問題在那?
其實你只要直接把程式COPY到你的程式中
呼叫後
然後把值印出來就可以了

lucy5222 發表於 2018-5-7 10:35:25

本帖最後由 lucy5222 於 2018-5-7 10:39 編輯

在這邊 謝謝你

lucy5222 發表於 2018-5-7 10:37:33

在這邊

超新手 發表於 2018-5-7 11:05:21

本帖最後由 超新手 於 2018-5-7 11:06 編輯

1. 不是, 是左上角
2. 對. 我的程式己經做類似處理
    你自己印出來看看就知道了
    有問題自己小改一下即可
3.矩陣運算? 這題目可大可小
float A, B, C;
//加法 C = A+B
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
C = A+B;
}
}
//減法 C = A-B
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
C = A-B;
}
}
//乘法 C = A*B
for(int i = 0 ; i < 3 ; i++) {
for(int j = 0 ; j < 3 ; j++) {
C = 0;
for(int k=0; k<3; k++) {
    C += A*B;
}
}
}
要用 C 處理矩陣運算? ..........:L

lucy5222 發表於 2018-5-7 11:10:46

本帖最後由 lucy5222 於 2018-5-7 11:13 編輯

不是矩陣之間的運算 是矩陣內的元素運算 再把他prinln出來
可以不要是左上角嗎 而是矩陣的中心
謝謝你

超新手 發表於 2018-5-7 11:18:06

矩陣的九個值你都知道
B, B, B,
B, B, B,
B, B, B,
那隨便抓任何一個值出來算, 不就好了
例如
float X = B*B + 3*B - B;

超新手 發表於 2018-5-7 11:25:12

>>可以不要是左上角嗎 而是矩陣的中心
改這個應該不會很難吧?
如果你不會改
只要呼叫前, 把 m, n 減一即可

lucy5222 發表於 2018-5-7 11:33:39

本帖最後由 lucy5222 於 2018-5-7 15:14 編輯

好 非常謝謝你 那可以再請問如何把你打的程式加入原本的程式中在呼叫出來嗎 而且從B到B總共有64個矩陣能夠自動記錄 並且自動把矩陣內的運算完成比如B(64個3*3矩陣中隨意一個的中心) 就可以自動把周遭的數字差顯示出來 (總共有8個)



















超新手 發表於 2018-5-7 16:05:38

本帖最後由 超新手 於 2018-5-7 16:09 編輯

看來你對陣列處理有點困難
原因出在它的輸出是一維陣列, 並不是二維陣列
所以我把程式改一下, 讓它變成二維陣列
照理說, 值輸出應該是相同的, 有問題再告知
#include <Wire.h>
#include <Adafruit_AMG88xx.h>
Adafruit_AMG88xx amg;
float pixels;
void setup() {
Serial.begin(9600);
Serial.println(F("AMG88xx pixels"));
bool status;
// default settings
status = amg.begin();
if (!status) {
    Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
    while (1);
}
Serial.println("-- Pixels Test --");
Serial.println();
delay(100); // let sensor boot up
}
void loop() {
//read all the pixels
amg.readPixels(&pixels);
Serial.print("[");
for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      Serial.print(pixels);
      Serial.print(", ");
    }
    Serial.println();
}
Serial.println("]");
Serial.println();
// 和中心點pixels的差值
Serial.print(pixels - pixels);Serial.print(" ");
Serial.print(pixels - pixels);Serial.print(" ");
Serial.println(pixels - pixels);
Serial.print(pixels - pixels);Serial.print(" ");
Serial.print(pixels - pixels);Serial.print(" ");
Serial.println(pixels - pixels);
Serial.print(pixels - pixels);Serial.print(" ");
Serial.print(pixels - pixels);Serial.print(" ");
Serial.println(pixels - pixels);

//delay a second
delay(1000);
}

經過修改後, 如果你要處理 pixels 的值
3x3 的陣列就是
pixels, pixels, pixels,
pixels, pixels, pixels,
pixels, pixels, pixels,
看你要怎樣運算都可以, 也比較直覺




lucy5222 發表於 2018-5-7 16:57:52

本帖最後由 lucy5222 於 2018-5-7 16:59 編輯

超新手 發表於 2018-5-7 16:05
看來你對陣列處理有點困難
原因出在它的輸出是一維陣列, 並不是二維陣列
所以我把程式改一下, 讓它變成二維 ...

謝謝你用心回答我的問題 這樣子的想法我之前也有想過 只是不知道如何打
然而現在想的是如何能夠紀錄這64個矩陣(每一個中央數值與周邊數值的矩陣3*3)(因為CCD是8*8所以有64個值),在矩陣內中央數值與其他八個的差值(正的),能夠自動的紀錄,而非
需要每次輸入指定的位置才能紀錄 謝謝

超新手 發表於 2018-5-7 16:59:55

本帖最後由 超新手 於 2018-5-7 17:01 編輯

只要寫成副程式, 加上使
用迴圈就可以了

lucy5222 發表於 2018-5-7 17:05:45

超新手 發表於 2018-5-7 16:59
只要寫成副程式, 加上使
用迴圈就可以了

可以請問要怎麼寫嗎 不好意思 對於這方面沒有很熟

lucy5222 發表於 2018-5-8 14:35:10

由於沒有很熟悉副程式的應用 因此也不知道該如何著手
還請大家幫忙一下 謝謝
頁: [1]
查看完整版本: 有關於像素處理的問題