matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象
預處理圖像
將圖像讀入工作區。
I = imread('rice.png');
imshow(I)
圖像中心的背景亮度比底部亮度高。預處理圖像,使背景亮度更加均勻。
第一步,使用形態學開運算刪除所有前景(米粒)。開運算會刪除無法完全包含結構元素的小對象。定義半徑為 15 的盤形結構元素,它完全可放入一粒米內。
se = strel('disk',15)
se =
strel is a disk shaped structuring element with properties:
Neighborhood: [29x29 logical]
Dimensionality: 2
要執行形態學開運算,請使用具有結構元素的 imopen。
background = imopen(I,se);
imshow(background)
從原始圖像 I 中減去背景逼近圖像 background,然后查看生成的圖像。從原始圖像中減去調整后的背景圖像后,生成的圖像具有均勻的背景,但現在對于分析來說有點暗。
I2 = I - background;
imshow(I2)
使用 imadjust,通過在低強度和高強度下都對 1% 的數據進行飽和處理,并通過拉伸強度值以填充 uint8 動態范圍,來提高處理后的圖像 I2 的對比度。
I3 = imadjust(I2);
imshow(I3)
請注意,前面的兩個步驟可以由使用 imtophat 的一個步驟來代替完成,后者先計算形態學開運算,然后從原始圖像中減去它。
I2 = imtophat(I,strel('disk',15));
創建處理后的圖像的二值版本,以便使用工具箱函數進行分析。使用 imbinarize 函數將灰度圖像轉換為二值圖像。使用 bwareaopen 函數去除圖像中的背景噪聲。
bw = imbinarize(I3);
bw = bwareaopen(bw,50);
imshow(bw)
識別圖像中的對象
現在您已創建原始圖像的二值版本,您可以對圖像中的對象執行分析。
在二值圖像中查找所有連通分量(對象)。結果的準確度取決于對象的大小、連通性參數(4、8 或任意值),以及是否有相互接觸的對象(在這種情況下,它們可能被標記為一個對象)。二值圖像 bw 中的一些米粒相互接觸。
cc = bwconncomp(bw,4)
cc = struct with fields:
Connectivity: 4
ImageSize: [256 256]
NumObjects: 95
PixelIdxList: {1x95 cell}
cc.NumObjects
ans = 95
查看圖像中標記為 50 的米粒。
grain = false(size(bw));
grain(cc.PixelIdxList{50}) = true;
imshow(grain)
通過創建標簽矩陣,然后將其顯示為偽彩色索引圖像,可視化圖像中的所有連通分量。
使用 labelmatrix 根據 bwconncomp 的輸出創建標簽矩陣。請注意,labelmatrix 將標簽矩陣存儲在依對象數量得出的最小數值類中。
labeled = labelmatrix(cc);
whos labeled
Name Size Bytes Class Attributes
labeled 256x256 65536 uint8
使用 label2rgb 選擇顏色圖、背景顏色以及標簽矩陣中的對象如何映射到顏色圖中的顏色。在偽彩色圖像中,用于標識標簽矩陣中每個對象的標簽映射到相關聯的顏色圖矩陣中的不同顏色。
RGB_label = label2rgb(labeled,'spring','c','shuffle');
imshow(RGB_label)
計算基于面積的統計量
使用 regionprops 計算圖像中每個對象的面積。每個米粒均為 cc 結構體中的一個連通分量。
graindata = regionprops(cc,'basic')
graindata=95×1 struct array with fields:
Area
Centroid
BoundingBox
創建新向量 grain_areas,它保存每個米粒的面積測量值。
grain_areas = [graindata.Area];
計算第 50 個分量的面積。
grain_areas(50)
ans = 194
找到并顯示面積最小的米粒。
[min_area, idx] = min(grain_areas)
min_area = 61
idx = 16
grain = false(size(bw));
grain(cc.PixelIdxList{idx}) = true;
imshow(grain)
使用 histogram 命令創建米粒面積的直方圖。
histogram(grain_areas)
title('Histogram of Rice Grain Area')
總結
以上是生活随笔為你收集整理的matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全面系统地总结Linux的基本操作(上)
- 下一篇: 8.分页、连接、自关联查询