提取圖像中的預定義區域親愛的每個人,
我想知道是否可以用腳本提取圖像預定義圓圈內的像素(參見附件)。
在此先感謝您的幫助。
KRS,
薩米爾
Re:提取圖像中的預定義區域也許。您可以使用有關圖像中像素值的統計信息創建模型,以創建過濾器所需的兩個閾值。您可能希望在canny過濾器之前平滑圖片(不在canny過濾器內),以便您可以使用平滑的像素構建模型。(編輯:內部精確濾鏡模糊更好,因為它跟踪浮點數據。外部模糊會將模糊圖像中的浮點數據減少到整數像素值0..255,而暗圖像中的大多數像素都是0..10左右。)
https://en.wikipedia.org/wiki/Canny_edge_detector 描述了精確過濾器的工作原理;大閾值(圖片非常小)是一條線開始的地方。兩個相鄰的像素必須相差很多。該線被“跟隨”直到它低於小閾值(非常非常小的圖片)。 “這兩個閾值是根據經驗確定的,它們的定義將取決於給定輸入圖像的內容。” - 維基百科
這些圖像中的顏色是否重要?如果沒有,您可能希望將圖像縮小為灰度。我認為這將成為一個更簡單的問題。您可以分配灰度值...
在圖像中獲取後,您將對該行做什麼?它只是一個可視化,還是會對該圖像進行更多計算?如果您需要質心和半徑,聚類方法可能仍然可以正常工作。
Re:提取圖像中的預定義區域親愛的Craige,
我們以自動方式部署了解決方案,但我們仍然需要手動調整閾值參數,因為照片是異構的。你認為自動化這一步是否可行?
非常感謝,
薩米爾
Re:提取圖像中的預定義區域親愛的Craige,
canny過濾器非常有用。
我會嘗試自動化這個過程。
聚類也非常有趣,但其他一些照片的結果不太明顯。
非常感謝你的幫助,
薩米爾
Re:提取圖像中的預定義區域看一下腳本索引中的canny過濾器示例。這些參數位於滑塊上,如果您的數據強度不同,可能會過於敏感,但對於我使用的示例圖像
腳本索引示例中的滑塊設置
為了得到這個
Canny過濾器檢測邊緣
頂部的兩個滑塊使圖像中的噪聲很平滑。將底部的兩個滑塊調整到適合於這些像素強度的值。腳本在示例中;如果圖片足夠相似,您可以自動化您的過程。輸出是B&W或1和0圖像。您可以在矩陣中抓取這些像素以進行進一步處理。
您可能還想對像素顏色進行一些分析。也許聚類會給你一個暗藍色和暗藍色的一對簇。也許你可以使用深藍色聚集像素的xy坐標。例如:
// load the test image
img = open("$desktop/large.png","png");
// grab the rgb data from the image
{r,g,b} = img<<GETPIXELS></GETPIXELS>
聚類結果變成了圖像
使用聚類像素的XY坐標來查找所需的參數可能更有意義。
Re:提取圖像中的預定義區域親愛的Craige,
感謝您的建議。
不幸的是,圖像內部的圓圈的定位可能從照片上移動到另一個(未標準化)。
我的問題是,是否有可能以自動方式檢測圓的輪廓。
KRS,
薩米爾
Re:提取圖像中的預定義區域是。獲取整個圖像的像素值矩陣,例如
image << getpixels(檢查腳本索引,我現在離桌子很遠)。
您可以將像素作為單獨的r,g,b通道或組合的JMP顏色。
接下來,您將需要一個相同尺寸的掩模矩陣,其中像素要保留,並且像素要拒絕零。您可以使用白色為一個而黑色為零的繪圖程序。加載該圖像並獲得一個通道,可能是紅色(r,g,b應該對於黑白圖像都相同),這將具有零和一個值。
現在決定你想要的結果:只是一個只有有趣像素的無序列表?或者一個與之前相同大小的矩陣,將無趣的值設置為零?
imageMatrix [Loc(mask)]將為您提供掩碼具有非零值的無序像素。
imageMatrix:* mask會在掩碼為零的位置為零,即掩碼為1的原始值。(:*是元素乘法的乘法。*矩陣代數倍增...不是你想要的。)
這個崗位可能有幫助。