利用GPT 將 matlab 內置 bwlookup 函數轉C

最近業務需要將 matlab中bwlookup 的轉C

這個函數沒有現成的m文件參考,內置已經打成庫了,所以沒有參考源代碼

但是它的解釋還是很清楚的,可以根據這個來寫

Nonlinear filtering using lookup tables - MATLAB bwlookup - MathWorks 中國

A?= bwlookup(B,lut)?performs a 2-by-2 or 3-by-3 nonlinear neighborhood filtering operation on binary image?BW. The neighborhood processing determines an integer index value used to access values in lookup table?lut. The fetched?lut?value becomes the pixel value in output image?A?at the targeted position.


它說的很清楚,BW是二值圖像矩陣,lut是一個512的查找表,對3*3鄰居矩陣進行一些濾波(權重和)得到最后結果

用GPT生成一個

#include <stdio.h>
#include <stdlib.h>#define WIDTH 3
#define HEIGHT 3// 將 3x3 鄰域編碼為一個 9 位二進制數
int encodeNeighborhood(int neighborhood[3][3]) {int code = 0;for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {code = (code << 1) | neighborhood[i][j];}}return code;
}// 應用查找表進行形態學操作
void bwlookup(int input[HEIGHT][WIDTH], int output[HEIGHT][WIDTH], int lut[512]) {int neighborhood[3][3];// 處理內部像素for (int y = 1; y < HEIGHT - 1; ++y) {for (int x = 1; x < WIDTH - 1; ++x) {// 提取 3x3 鄰域for (int i = -1; i <= 1; ++i) {for (int j = -1; j <= 1; ++j) {neighborhood[i + 1][j + 1] = input[y + i][x + j];}}// 使用查找表進行轉換int code = encodeNeighborhood(neighborhood);output[y][x] = lut[code];}}// 處理邊緣像素 (拷貝原始值)for (int x = 0; x < WIDTH; ++x) {output[0][x] = input[0][x];output[HEIGHT-1][x] = input[HEIGHT-1][x];}for (int y = 0; y < HEIGHT; ++y) {output[y][0] = input[y][0];output[y][WIDTH-1] = input[y][WIDTH-1];}
}int main() {// 示例二值圖像 (3x3)int input[HEIGHT][WIDTH] = {{1, 0, 1},{0, 1, 0},{1, 0, 1}};// 初始化輸出圖像int output[HEIGHT][WIDTH] = {0};// 示例查找表int lut[512] = {0};lut[2] = 1; // 設定特定模式的輸出值// 應用 bwlookupbwlookup(input, output, lut);// 打印結果圖像for (int y = 0; y < HEIGHT; ++y) {for (int x = 0; x < WIDTH; ++x) {printf("%d ", output[y][x]);}printf("\n");}return 0;
}

?顯然它給的矩陣濾波器順序搞錯了,它的順序是

這是行優先,我本來理解為要列優先,其實人matlab代碼給出解釋了(包括網頁)

手動改動下?

仔細觀察,

這給地方還有一個加1,c代碼中求和一樣的code,沒有加1,原因是這里做index的時候,c是從0開始,index本身比matlab就要少1

這樣計算出來發現還不對,仔細對比,中心數據都對上了,發現還是邊緣不對

matlab中的原矩陣需要擴展,擴展的地方都要填0,然后只取中間

把想法交給GPT,讓他生成把

#include <stdio.h>#define HEIGHT 5
#define WIDTH 5// 將 3x3 鄰域編碼為一個 9 位二進制數
int encodeNeighborhood(int arr[3][3]) {int code = 0;for (int i = 0; i < 3; ++i) {for (int j = 0; j < 3; ++j) {code |= (arr[i][j] << (i * 3 + j));}}return code;
}// 應用查找表進行形態學操作
void bwlookup(int input[HEIGHT][WIDTH], int output[HEIGHT][WIDTH], int lut[512]) {int extendedInput[HEIGHT + 2][WIDTH + 2] = {0}; // 擴展后的輸入數組,初始化為零int neighborhood[3][3];// 將原始輸入復制到擴展后的數組中for (int y = 0; y < HEIGHT; ++y) {for (int x = 0; x < WIDTH; ++x) {extendedInput[y + 1][x + 1] = input[y][x];}}// 對擴展后的數組應用形態學操作for (int y = 1; y < HEIGHT + 1; ++y) {for (int x = 1; x < WIDTH + 1; ++x) {// 提取 3x3 鄰域for (int i = -1; i <= 1; ++i) {for (int j = -1; j <= 1; ++j) {neighborhood[i + 1][j + 1] = extendedInput[y + i][x + j];}}// 使用查找表進行轉換int code = encodeNeighborhood(neighborhood);output[y - 1][x - 1] = lut[code];}}
}// 測試函數
int main() {int input[HEIGHT][WIDTH] = {{0, 0, 0, 0, 0},{0, 1, 1, 1, 0},{0, 1, 1, 1, 0},{0, 1, 1, 1, 0},{0, 0, 0, 0, 0}};int output[HEIGHT][WIDTH] = {0}; // 初始化輸出數組int lut[512]; // 查找表// 初始化查找表 (這里假設查找表已定義)for (int i = 0; i < 512; ++i) {lut[i] = 1; // 這里只是一個示例,你應該根據實際需求初始化查找表}// 應用形態學操作bwlookup(input, output, lut);// 打印輸出printf("輸出:\n");for (int y = 0; y < HEIGHT; ++y) {for (int x = 0; x < WIDTH; ++x) {printf("%d ", output[y][x]);}printf("\n");}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39095.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python請求報錯::requests.exceptions.ProxyError: HTTPSConnectionPool

在發送網頁請求時&#xff0c;發現很久未響應&#xff0c;最后報錯&#xff1a; requests.exceptions.ProxyError: HTTPSConnectionPool(hostsvr-6-9009.share.51env.net, port443): Max retries exceeded with url: /prod-api/getInfo (Caused by ProxyError(Unable to conne…

秒懂設計模式--學習筆記(5)【創建篇-抽象工廠】

目錄 4、抽象工廠4.1 介紹4.2 品牌與系列&#xff08;針對工廠泛濫&#xff09;(**分類**)4.3 產品規劃&#xff08;**數據模型**&#xff09;4.4 生產線規劃&#xff08;**工廠類**&#xff09;4.5 分而治之4.6 抽象工廠模式的各角色定義如下4.7 基于此抽象工廠模式以品牌與系…

vue啟動時的錯誤

解決辦法一&#xff1a;在vue.config.js中直接添加一行代碼 lintOnSave:false 關閉該項目重新運行就可啟動 解決辦法二&#xff1a; 修改組件名稱

Python容器 之 通用功能

1.切片 1.格式&#xff1a; 數據[起始索引:結束索引:步長 2.適用類型&#xff1a; 字符串(str)、列表(list)、元組(tuple) 3.說明&#xff1a; 通過切片操作, 可以獲取數據中指定部分的內容 4.注意 : 結束索引對應的數據不會被截取到 支持正向索引和逆向索引 步長用于設置截取…

配音軟件有哪些?分享五款超級好用的配音軟件

隨著嫦娥六號的壯麗回歸&#xff0c;舉國上下都沉浸在這份自豪與激動之中。 在這樣一個歷史性的時刻&#xff0c;我們何不用聲音記錄下這份情感&#xff0c;讓這份記憶以聲音的形式流傳&#xff1f; 無論是制作視頻分享這份喜悅&#xff0c;還是創作音頻講述探月故事&#xff…

Oracle數據庫中RETURNING子句

RETURNING子句允許您檢索插入、刪除或更新所修改的列&#xff08;以及基于列的表達式&#xff09;的值。如果不使用RETURNING&#xff0c;則必須在DML語句完成后運行SELECT語句&#xff0c;才能獲得更改列的值。因此&#xff0c;RETURNING有助于避免再次往返數據庫&#xff0c;…

Plotly:原理、使用與數據可視化的未來

文章目錄 引言Plotly的原理Plotly的基本使用安裝Plotly創建基本圖表定制圖表樣式 Plotly的高級特性交互式圖表圖表動畫圖表集成 結論 引言 在當今的數據驅動世界中&#xff0c;數據可視化已經成為了一個至關重要的工具。它允許我們直觀地理解數據&#xff0c;發現數據中的模式…

CXL-GPU: 全球首款實現百ns以內的低延遲CXL解決方案

數據中心在追求更高性能和更低總擁有成本&#xff08;TCO&#xff09;的過程中面臨三大主要內存挑戰。首先&#xff0c;當前服務器內存層次結構存在局限性。直接連接的DRAM與固態硬盤&#xff08;SSD&#xff09;存儲之間存在三個數量級的延遲差異。當處理器直接連接的內存容量…

VideoPrism——探索視頻分析領域模型的算法與應用

概述 論文地址:https://arxiv.org/pdf/2402.13217.pdf 視頻是我們觀察世界的生動窗口&#xff0c;記錄了從日常瞬間到科學探索的各種體驗。在這個數字時代&#xff0c;視頻基礎模型&#xff08;ViFM&#xff09;有可能分析如此海量的信息并提取新的見解。迄今為止&#xff0c;…

【vuejs】vue-router 路由跳轉參數傳遞詳解和應用場景及技巧

1. Vue2 Router 路由基礎 1.1 路由定義 路由定義是Vue Router中實現頁面路由跳轉的基礎。在Vue2中&#xff0c;路由的定義通常在應用的入口文件或路由配置文件中進行。路由定義涉及到路徑模式&#xff08;path&#xff09;、視圖組件&#xff08;component&#xff09;以及一…

【數據分析思維--史上最全最牛逼】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是書生?&#xff0c;主要和大家分享一下數據分析的思維&#xff01;怎么提好我們對于業務的判斷是非常重要的&#xff01;&#xff01;&#xff01;希望對大家有所幫助。 &#x1f49e;&#x1f49e;代碼是你…

采煤機作業3D虛擬仿真教學線上展示增強應急培訓效果

在化工行業的生產現場&#xff0c;安全永遠是首要之務。為了加強從業人員的應急響應能力和危機管理能力&#xff0c;紛紛引入化工行業工藝VR模擬培訓&#xff0c;讓應急演練更加生動、高效。 化工行業工藝VR模擬培訓軟件基于真實的廠區環境&#xff0c;精確還原了各類事件場景和…

醫療器械FDA | 醫療器械軟件如何做源代碼審計?

醫療器械網絡安全測試https://link.zhihu.com/?targethttps%3A//www.wanyun.cn/Support%3Fshare%3D24315_ea8a0e47-b38d-4cd6-8ed1-9e7711a8ad5e 醫療器械源代碼審計是一個確保醫療器械軟件安全性和可靠性的重要過程。以下是醫療器械源代碼審計的主要步驟和要點&#xff0c;以…

Vue3 sortablejs 表格拖拽后,表格無法更新的問題處理

實用sortablejs在vue項目中實現表格行拖拽排序 你可能會發現&#xff0c;表格排序是可以實現&#xff0c;但是我們基于數據驅動的vue中關聯的數據并沒有發生變化&#xff0c; 如果你的表格帶有列固定(固定列實際上在dom中有兩個表格&#xff0c;其中固定的列在一個表格中&…

【Python】優雅的快速選擇 - 快速排序 - 隨機快速排序

快速選擇&#xff08;遞歸實現版&#xff09; 這里給出以 “leetcode215. 數組中的第K個最大元素”為例的代碼。 class Solution:def findKthLargest(self, nums, k):self.nums numsn len(nums)return self.quickSelect(0,n-1,n-k)def quickSelect(self,l,r,k): # 手擼快速…

Vue3實戰筆記(64)—Vue 3自定義指令的藝術:實戰中的最佳實踐

文章目錄 前言一、一些簡單的Vue3自定義指令超實用案例總結 前言 書接上文&#xff0c;在Vue3中&#xff0c;自定義指令是一種強大的工具&#xff0c;允許我們擴展HTML元素的功能。通過自定義指令&#xff0c;我們可以創建可重用的行為&#xff0c;并將它們綁定到任何元素上。…

訂單折扣金額分攤算法|代金券分攤|收銀系統|積分分攤|分攤|精度問題|按比例分配|錢分攤|錢分配

一個金額分攤的算法&#xff0c;將折扣分攤按比例&#xff08;細單實收在總體的占比&#xff09;到各個細單中。 此算法需要達到以下要求&#xff1a; 折扣金額接近細單總額&#xff0c;甚至折扣金額等于細單金額&#xff0c;某些時候甚至超過細單總額&#xff0c;要保證實收不…

游泳哪個牌子好?6大游泳耳機選購技巧總結分享

游泳耳機作為水上運動愛好者和游泳專業人士的必備裝備&#xff0c;不僅要能夠抵御水的侵入&#xff0c;還要提供清晰的音質和舒適的佩戴體驗。在市面上&#xff0c;不同品牌的游泳耳機琳瑯滿目&#xff0c;選擇起來可能會令人頭疼。本文旨在為您提供一份詳盡的游泳耳機選購指南…

每日一練 - Routing Policy節點邏輯

01 真題題目 一個 routing-policy 下可以有多個節點,不同節點號用 node 標識,每個節點下可以有多個if-match 和 apply 子句,下面哪些描述是錯誤的? A. 不同節點之間是“或"的關系 B. 當路由與該節點的任意一個 if-match 條件匹配失敗后&#xff0c;系統自動轉入下一節點…

Gemma輕量級開放模型在個人PC上釋放強大性能,讓每個桌面秒變AI工作站

Google DeepMind團隊最近推出了Gemma&#xff0c;這是一個基于其先前Gemini模型研究和技術的開放模型家族。這些模型專為語言理解、推理和安全性而設計&#xff0c;具有輕量級和高性能的特點。 Gemma 7B模型在不同能力領域的語言理解和生成性能&#xff0c;與同樣規模的開放模型…