事情是這樣的,下圖是一張灰度圖,我想加寬下圖中的曝光條,同時降低背景的灰度值。但我設計的代碼會使曝光條之外的其它區域產生噪點,就是不屬于曝光條的部分也會因為灰度值和曝光條一樣而被保留。
然后我就想,因為噪點的分布都是離散的,而曝光條的灰度值都是在一片區域且均勻的,所以我就根據這個條件設計代碼,只要不符合曝光條條件的,都給我降低灰度值。
但詭異的事情發生了,噪點是消除了,但我之前加寬的部分也被降低灰度了!
我本來以為這是因為我的代碼認為我加寬的部分也是屬于曝光條區域之外的,所以我就設計了下面兩個代碼,把加寬區域和降低背景灰度分為兩盒代碼,并且加寬區域后講其保存為.png圖,再用這張圖去降低背景灰度。
但同樣詭異的事情再次發生了,而且這次是真正的詭異。運行了第二個代碼后,我的加寬的部分灰度還是被降低了,就像是第二個代碼知道我第一個代碼做的事一樣。對于第二個代碼來說,它處理的圖片是被加寬過后的,看起來就和第一個代碼處理的圖片沒什么兩樣,只不過是曝光條變胖了。
但就是因為邏輯是對的,第二張代碼還是準確的找到了我加寬的部分,并將它的灰度值降低了三分之一。。。我的天吶,長這么大沒見過這么詭異的事情,如果這是真的,這不亞于雙縫干涉一樣的詭異了。
求大佬幫幫忙,看看我出錯在哪里?我寧愿相信我是錯的,也不相信這么詭異的事情,我的三觀感覺收到了挑戰。。。

代碼一
%********* 提高影像的整體明暗對比度,且用for回圈遍歷像素.png版
%%
clc;
clear;
close all;
tic; %計算程式運行時間
cd ('E:\辦公\研究生學習\研究方向\新的研究\最近研究作業區\OI夜空分類\OI夜空圖分類\調整對比度后\用imadjust函式調整的對比度') %1219檔案夾為raw檔案所在路徑(可靈活變動)
oldpath = cd;
filepath=oldpath;
cd(filepath)
filename1= ls('*.png'); %讀取所有png檔案,filename1是一個矩陣,每行是一個檔案名,行數為檔案數。
filename2= ls('*.png');
size(filename2)
for i = 1:size(filename1, 1) %size(filename1, 1)代表filename1的行數。
b=filename1(i,:);
a=imread(b);
row=size(a,1); %影像的行
col=size(a,2); %影像的列
t=254; %灰度值閾值(threshold)
for k=1:1:row-8
for m=1:1:col-8
if a(k,m)>t&&a(k+1,m)>t&&a(k+2,m)>t&&a(k+3,m)>t&&a(k+4,m)>t&&a(k+5,m)>t&&a(k+6,m)>t&&a(k+7,m)>t&&a(k+8,m)>t ...
&&a(k,m+1)>t&&a(k,m+2)>t&&a(k,m+3)>t&&a(k,m+4)>t&&a(k,m+5)>t&&a(k,m+6)>t&&a(k,m+7)>t ...
&&a(k+1,m+1)>t&&a(k+2,m+2)>t&&a(k+3,m+3)>t&&a(k+4,m+4)>t&&a(k+5,m+5)>t %使現狀曝光條維持在高亮度狀態
a(k,m+6:m+17)=a(k,m); %加粗線狀曝光條
a(k,m)=a(k,m)*1;
else
a(k,m)=a(k,m)*1; %讓背景的灰度值都降低3.3倍
end
end
end
str = strcat('E:\辦公\研究生學習\研究方向\新的研究\最近研究作業區\OI夜空分類\OI夜空圖分類\調整對比度后\在imadjust函式的基礎上再手動調節對比度\0101\',filename2(i,:)); %進制轉換完成后,所得到的圖片保存的位置為1218檔案夾(可靈活變動)。
imwrite(a,str); %將影像資料寫入影像檔案中。(畫圖)
end
cd(oldpath)
!echo mission completed!
toc;
代碼二
%********* 提高影像的整體明暗對比度,且用for回圈遍歷像素.png版
%%
clc;
clear;
close all;
tic; %計算程式運行時間
cd ('E:\辦公\研究生學習\研究方向\新的研究\最近研究作業區\OI夜空分類\OI夜空圖分類\調整對比度后\在imadjust函式的基礎上再手動調節對比度\0101') %1219檔案夾為raw檔案所在路徑(可靈活變動)
oldpath = cd;
filepath=oldpath;
cd(filepath)
filename1= ls('*.png'); %讀取所有png檔案,filename1是一個矩陣,每行是一個檔案名,行數為檔案數。
filename2= ls('*.png');
size(filename2)
for i = 1:size(filename1, 1) %size(filename1, 1)代表filename1的行數。
b=filename1(i,:);
a=imread(b);
row=size(a,1); %影像的行
col=size(a,2); %影像的列
t=254; %灰度值閾值(threshold)
for k=1:1:row-8
for m=1:1:col-8
if a(k,m)>t&&a(k+1,m)>t&&a(k+2,m)>t&&a(k+3,m)>t&&a(k+4,m)>t&&a(k+5,m)>t&&a(k+6,m)>t&&a(k+7,m)>t&&a(k+8,m)>t ...
&&a(k,m+1)>t&&a(k,m+2)>t&&a(k,m+3)>t&&a(k,m+4)>t&&a(k,m+5)>t&&a(k,m+6)>t&&a(k,m+7)>t ...
&&a(k+1,m+1)>t&&a(k+2,m+2)>t&&a(k+3,m+3)>t&&a(k+4,m+4)>t&&a(k+5,m+5)>t %使現狀曝光條維持在高亮度狀態
a(k,m)=a(k,m)*1;
else
a(k,m)=a(k,m)/3.3; %讓背景的灰度值都降低3.3倍
end
end
end
str = strcat
代碼一的結果圖
代碼二的結果圖

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277861.html
標籤:數據結構與算法
上一篇:尋找了解差分進化演算法的老哥
