পাঠ্যে "নদী" সনাক্তকরণ


175

টেক্স স্ট্যাকেক্সচেঞ্জের ওপরে, আমরা এই প্রশ্নে অনুচ্ছেদে কীভাবে "নদীগুলি" সনাক্ত করতে পারি সে সম্পর্কে আলোচনা করছি ।

এই প্রসঙ্গে, নদী হ'ল শ্বেত স্থানের ব্যান্ড যা পাঠ্যের ইন্টারফেস স্পেসের দুর্ঘটনাজনিত প্রান্তিককরণের ফলস্বরূপ। যেহেতু এটি একটি পাঠকের পক্ষে যথেষ্ট বিভ্রান্তিকর হতে পারে খারাপ নদীগুলি দরিদ্র টাইপোগ্রাফির লক্ষণ হিসাবে বিবেচিত হয়। নদীগুলির সাথে পাঠ্যের উদাহরণ এটি একটি, যেখানে দুটি নদী তির্যকভাবে প্রবাহিত হয়।

এখানে চিত্র বর্ণনা লিখুন

এই নদীগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করার আগ্রহ রয়েছে, যাতে সেগুলি এড়ানো যায় (সম্ভবত পাঠ্যের ম্যানুয়াল সম্পাদনা করে)। টেলএক্স পর্যায়ে রাফিংক কিছুটা অগ্রগতি করছে (যা কেবল গ্লাইফ অবস্থান এবং বাউন্ডিং বাক্স সম্পর্কে জানে) তবে আমি আত্মবিশ্বাস অনুভব করি যে নদীগুলি সনাক্ত করার সর্বোত্তম উপায়টি কিছু চিত্র প্রক্রিয়াকরণ সহ রয়েছে (যেহেতু গ্লাইফ আকারগুলি অত্যন্ত গুরুত্বপূর্ণ এবং টেক্সের কাছে উপলভ্য নয়) । আমি উপরের চিত্রটি থেকে নদীগুলি বের করার জন্য বিভিন্ন উপায়ে চেষ্টা করেছি, তবে অল্প পরিমাণে উপবৃত্তাকার ঝাপসা প্রয়োগ করার আমার সাধারণ ধারণাটি যথেষ্ট ভাল বলে মনে হচ্ছে না। আমি কিছু রেডন চেষ্টা করেছিলামপ্রচুর পরিমাণে ভিত্তিক ফিল্টারিং রূপান্তর, তবে আমি সেগুলির সাথে কোথাও পাই নি। নদীগুলি মানুষের চোখ / রেটিনা / মস্তিষ্কের বৈশিষ্ট্য সনাক্তকরণের সার্কিটগুলিতে খুব দৃশ্যমান এবং একরকম আমি মনে করব এটি কোনওরকম ফিল্টারিং অপারেশনে অনুবাদ করা যেতে পারে তবে আমি এটি কার্যকর করতে সক্ষম নই। কোন ধারনা?

সুনির্দিষ্টভাবে বলতে গেলে, আমি এমন কিছু অপারেশন খুঁজছি যা উপরের চিত্রের 2 টি নদী সনাক্ত করবে, তবে অন্য কোনও ভুয়া ইতিবাচক সনাক্তকরণ নেই।

সম্পাদনা: এন্ডোলিথ জিজ্ঞাসা করল কেন আমি একটি চিত্র-প্রসেসিং-ভিত্তিক পদ্ধতির অনুসরণ করছি কেননা টেক্সে আমাদের কাছে গ্লাইফ অবস্থান, স্পেসিং ইত্যাদির অ্যাক্সেস রয়েছে এবং প্রকৃত পাঠ্য পরীক্ষা করে এমন অ্যালগরিদম ব্যবহার করা আরও দ্রুত এবং আরও নির্ভরযোগ্য হতে পারে। কিছু অন্যান্য উপায় করছেন জন্য আমার কারণ যে আকৃতিগ্লাইফগুলি কোনও নদীটি কীভাবে লক্ষণীয় তা প্রভাবিত করতে পারে এবং পাঠ্য স্তরে এই আকারটি (যা হরফের উপর নির্ভর করে, লিঙ্গচারিংয়ের উপর নির্ভর করে) বিবেচনা করা খুব কঠিন। গ্লাইফগুলির আকৃতি কীভাবে গুরুত্বপূর্ণ হতে পারে তার উদাহরণের জন্য, নিম্নলিখিত দুটি উদাহরণ বিবেচনা করুন, যেখানে তাদের মধ্যে পার্থক্য হ'ল আমি প্রায় একই প্রস্থের অন্যদের সাথে কয়েকটি গ্লিফ প্রতিস্থাপন করেছি, যাতে পাঠ্য-ভিত্তিক বিশ্লেষণ বিবেচনা করা হয় এগুলি সমানভাবে ভাল / খারাপ। তবে নোট করুন, প্রথম উদাহরণে নদীগুলি দ্বিতীয়টির চেয়ে অনেক খারাপ।

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


5
+1 আমি এই প্রশ্নটি পছন্দ করি। আমার প্রথম চিন্তাটি হফ ট্রান্সফর্ম , তবে এটির জন্য সম্ভবত কিছু প্রাক প্রক্রিয়াজাতকরণ প্রয়োজন। প্রথমে কোনও ডিলেশন ফিল্টার
datageist

আমি আশ্চর্য হয়েছি রেডন ট্রান্সফর্মটি আসলে কাজ করেনি। তুমি এটা কিভাবে করলে?
এন্ডোলিথ

@ এন্ডোলিথ: পরিশীলিত কিছুই নয়। আমি ImageLines[]ম্যাথামেটিকা ​​থেকে ব্যবহার করেছি এবং কিছু প্রিপ্রোসেসিং ছাড়াও। আমার ধারণা, এটি প্রযুক্তিগতভাবে রেডন ট্রান্সফর্মের পরিবর্তে একটি হফ ব্যবহার করছে। সঠিক প্রিপ্রোসেসিং (আমি ডেটাজিস্টের প্রস্তাবিত ডিলেশন ফিল্টার চেষ্টা করিনি) এবং / অথবা পরামিতি সেটিংস এই কাজটি করতে পারলে আমি অবাক হব না।
লেভ বিশপ

গুগল ইমেজ সন্ধান নদীগুলির জন্য "বাঁকানো" নদীগুলিও দেখায়। আপনি কি সেগুলি সন্ধান করতে চান? cdn.ilovetypography.com/img/text-river1.gif
এন্ডোলিথ

@ এন্ডোলিথ আমার ধারণা আমি শেষ পর্যন্ত মানব ভিজ্যুয়াল সিস্টেমের প্রসেসিংয়ের প্রতিলিপি তৈরি করতে চাই যা স্পেসগুলির নির্দিষ্ট কনফিগারেশনগুলিকে বিভ্রান্ত করে তোলে। যেহেতু এটি নদীগুলির জালিয়াতির জন্যও ঘটতে পারে, তাই আমি সেগুলি ধরতে চাই, যদিও সরলগুলি সাধারণভাবে সমস্যা হিসাবে বেশি বলে মনে হয়। আরও ভাল হ'ল পাঠগুলির পড়ার সময় তারা কতটা দৃ visible়রূপে দৃশ্যমান তার সাথে মিলেমিশে নদীর "দুষ্টতা" মাপার উপায়। তবে এগুলি সবই বিষয়ভিত্তিক এবং পরিমাণ নির্ধারণ করা শক্ত। প্রথমত, খুব বেশি মিথ্যা ধনাত্মকতা ছাড়াই সত্যই সমস্ত খারাপ নদীর সন্ধান করা তা করবে।
লেভ বিশপ

উত্তর:


135

আমি এটি সম্পর্কে আরও কিছু ভেবেছি, এবং মনে করি যে নিম্নলিখিতটি মোটামুটি স্থিতিশীল হওয়া উচিত। দ্রষ্টব্য যে আমি নিজেকে রূপচর্চা সংক্রান্ত ক্রিয়াকলাপের মধ্যে সীমাবদ্ধ রেখেছি, কারণ এগুলি কোনও মানক চিত্র প্রক্রিয়াকরণ গ্রন্থাগারে পাওয়া উচিত in

(1) এনপিক্স বাই বাই 1 মুখোশ সহ চিত্রটি খুলুন, যেখানে এনপিক্স অক্ষরের মধ্যবর্তী উল্লম্ব দূরত্ব সম্পর্কে

#% read image
img = rgb2gray('http://i.stack.imgur.com/4ShOW.png');

%# threshold and open with a rectangle
%# that is roughly letter sized
bwImg = img > 200; %# threshold of 200 is better than 128

opImg = imopen(bwImg,ones(13,1));

এখানে চিত্র বর্ণনা লিখুন

(২) নদী হতে খুব সংকীর্ণ যেকোন বিষয়কে মুছে ফেলার জন্য 1-বাই-এমপিক্স মাস্ক সহ চিত্রটি খুলুন।

opImg = imopen(opImg,ones(1,5));

এখানে চিত্র বর্ণনা লিখুন

(3) অনুচ্ছেদের মধ্যে স্থান বা ইন্ডেন্টেশনের কারণে অনুভূমিক "নদী এবং হ্রদ" সরান। এর জন্য, আমরা সমস্ত সত্য সারি সারিগুলি সরিয়ে ফেলি এবং আমরা জানি যে এনপিক্স-বাই -1 মুখোশটি যা আমরা জানি যে আমরা আগে পাওয়া নদীগুলিকে প্রভাবিত করব না।

হ্রদ সরানোর জন্য, আমরা একটি খোলার মুখোশ ব্যবহার করতে পারি যা এনপিক্স-বাই-এনপিক্সের চেয়ে কিছুটা বড়।

এই পদক্ষেপে, আমরা সত্যিকারের নদী হিসাবে খুব ছোট যা কিছু ফেলে দিতে পারি, অর্থাৎ (এনপিক্স + 2) * (এমপিক্স + 2) * 4 (এটি আমাদের ~ 3 লাইন দেবে) এর চেয়ে কম অঞ্চল জুড়ে থাকে। +2 রয়েছে কারণ আমরা জানি যে সমস্ত বস্তু কমপক্ষে উচ্চতায় এনপিক্স এবং প্রস্থে এমপিক্স এবং আমরা তার থেকে কিছুটা উপরে যেতে চাই।

%# horizontal river: just look for rows that are all true
opImg(all(opImg,2),:) = false;
%# open with line spacing (nPix)
opImg = imopen(opImg,ones(13,1));

%# remove lakes with nPix+2
opImg = opImg & ~imopen(opImg,ones(15,15)); 

%# remove small fry
opImg = bwareaopen(opImg,7*15*4);

এখানে চিত্র বর্ণনা লিখুন

(4) যদি আমরা কেবল দৈর্ঘ্যই নয়, নদীর প্রস্থেও আগ্রহী, আমরা কঙ্কালের সাথে দূরত্বের রূপান্তরকে একত্রিত করতে পারি।

   dt = bwdist(~opImg);
   sk = bwmorph(opImg,'skel',inf);
   %# prune the skeleton a bit to remove branches
   sk = bwmorph(sk,'spur',7);

   riversWithWidth = dt.*sk;

এখানে চিত্র বর্ণনা লিখুন (রঙগুলি নদীর প্রস্থের সাথে সামঞ্জস্যপূর্ণ (যদিও রঙের বারটি 2 এর ফ্যাক্টর দ্বারা বন্ধ রয়েছে)

এখন আপনি প্রতিটি সংযুক্ত উপাদানগুলির পিক্সেল সংখ্যা এবং তার পিক্সেল মানগুলির গড় গড়ে গড় প্রশস্ততা গণনা করে নদীর আনুমানিক দৈর্ঘ্য পেতে পারেন।


দ্বিতীয়টি, "নো-নদী" চিত্রের ক্ষেত্রে ঠিক একই বিশ্লেষণ প্রয়োগ হয়েছে:

এখানে চিত্র বর্ণনা লিখুন


ধন্যবাদ। আমার মতলব আছে তাই এটি আরও শক্তিশালী হবে তা দেখার জন্য আমি এটি অন্য কয়েকটি গ্রন্থে চেষ্টা করে দেখব।
লেভ বিশপ

এটি টেক্সে ফিরে একীভূত করা অন্য সমস্যা হতে পারে, যদি না আমরা এটি কোনওভাবে লুয়ায় পোর্ট করতে পারি।
hফিংক

@ লাইভবিশপ: আমি মনে করি আমি বিষয়টি আরও ভালভাবে বুঝতে পেরেছি। নতুন সমাধানটি মোটামুটি শক্তিশালী হওয়া উচিত।
জোনাস

@ লিভবিশপ: আরও একটি আপডেট।
জোনাস

1
@ লাইভবিশপ: সবেমাত্র দ্বিতীয় চিত্রটি লক্ষ্য করেছেন। রূপচর্চা-ভিত্তিক বিশ্লেষণটি কাজ করে out
জোনাস

56

গাণিতিকায় ক্ষয় এবং হাফ রূপান্তর ব্যবহার করে:

(*Get Your Images*)
i = Import /@ {"http://i.stack.imgur.com/4ShOW.png", 
               "http://i.stack.imgur.com/5UQwb.png"};

(*Erode and binarize*)
i1 = Binarize /@ (Erosion[#, 2] & /@ i);

(*Hough transform*)
lines = ImageLines[#, .5, "Segmented" -> True] & /@ i1;

(*Ready, show them*)
Show[#[[1]],Graphics[{Thick,Orange, Line /@ #[[2]]}]] & /@ Transpose[{i, lines}]

এখানে চিত্র বর্ণনা লিখুন

মিঃ উইজার্ডের মন্তব্যের উত্তর দিয়ে সম্পাদনা করুন

আপনি যদি অনুভূমিক রেখাগুলি থেকে মুক্তি পেতে চান তবে পরিবর্তে এই জাতীয় কিছু করুন (সম্ভবত কেউ এটিকে আরও সহজ করে তুলতে পারে):

Show[#[[1]], Graphics[{Thick, Orange, Line /@ #[[2]]}]] & /@ 
 Transpose[{i, Select[Flatten[#, 1], Chop@Last@(Subtract @@ #) != 0 &] & /@ lines}]

এখানে চিত্র বর্ণনা লিখুন


1
সমস্ত অনুভূমিক রেখা থেকে মুক্তি পাবে না কেন? (+1)
মিঃ উইজার্ড

@জনাব. সমস্ত লাইন সনাক্ত করা হচ্ছে তা দেখানোর জন্য ...
ড। বেলিসারিয়াস

1
সমস্যাটি অবশ্য এই অংশ নয়, তাই না?
মিঃ উইজার্ড

@জনাব. অনুরোধ হিসাবে সম্পাদিত

4
@ বিলেসারিয়াস হাফ ট্রান্সফর্মে ব্যবহৃত সমন্বিত সিস্টেমটি 8.0.0 এর পরে রেডনের রূপান্তরটির সাথে মেলে changed এর ফলে চিত্রাবলীর আচরণ বদলে গেছে। সামগ্রিকভাবে এটি একটি উন্নতি, যদিও এই ক্ষেত্রে কেউ আগের আচরণকে পছন্দ করবে। আপনি শিখর detections নিয়ে পরীক্ষা করতে চান না, আপনি পরিবর্তন করতে পারেন ইনপুট ইমেজ অনুপাত 1 এর কাছাকাছি হতে এবং এর ফলে 8.0.0 অনুরূপ প্রাপ্ত: lines = ImageLines[ImageResize[#, {300, 300}], .6, "Segmented" -> True] & /@ i1;। যা যা বলা হচ্ছে, এই সমস্যার জন্য একটি রূপচর্চা পদ্ধতি আরও দৃ more় বলে মনে হয়।
ম্যাথিয়াস ওডিসিও

29

হুমম ... আমার ধারণা রেডন ট্রান্সফর্মটি বের করা এত সহজ নয় easy (রেডন ট্রান্সফর্মটি মূলত চিত্রটি "এটিকে দেখে" প্রান্ত-অনের দিকে ঘোরায় It's

এখানে চিত্র বর্ণনা লিখুন

অনুভূমিক অক্ষটি বরাবর এই স্লাইসের এই প্লটের বামে শীর্ষ হিসাবে 70০ ডিগ্রি ঘোরার একটিকে পরিষ্কারভাবে দেখা যায়:

এখানে চিত্র বর্ণনা লিখুন

বিশেষত যদি পাঠটি গাউসিয়ান প্রথমে অস্পষ্ট করে থাকে:

এখানে চিত্র বর্ণনা লিখুন

তবে আমি নিশ্চিত নই যে কীভাবে বাকী আওয়াজগুলি থেকে নির্ভরযোগ্যভাবে এই শিখরগুলি বের করা যায়। সিনোগ্রামের উজ্জ্বল শীর্ষ এবং নীচের প্রান্তটি পাঠ্যের অনুভূমিক রেখাগুলির মধ্যে "নদী" উপস্থাপন করে, যা আপনি সম্ভবত প্রকাশ করেন না। সম্ভবত একটি ভারী ফাংশন বনাম কোণ যা আরও উল্লম্ব লাইনগুলিকে জোর দেয় এবং অনুভূমিকগুলি হ্রাস করে?

একটি সাধারণ কোসাইন ওয়েট ফাংশন এই চিত্রটিতে ভাল কাজ করে:

এখানে চিত্র বর্ণনা লিখুন

90 ডিগ্রিতে উল্লম্ব নদী সন্ধান করা যা সিনোগ্রামে বিশ্বব্যাপী ম্যাক্সিমা:

এখানে চিত্র বর্ণনা লিখুন

এবং এই চিত্রটিতে একটিটিকে 104 ডিগ্রীতে সন্ধান করা হয়েছে যদিও প্রথমে অস্পষ্টতা এটিকে আরও নির্ভুল করে তোলে:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

(সায়পাইয়ের radon()কাজটি একধরণের বোবা , বা আমি নদীর মাঝের মধ্য দিয়ে যাওয়ার লাইন হিসাবে এই চিত্রটিকে মূল চিত্রটিতে ম্যাপ করব))

অস্পষ্ট এবং ভারযুক্ত হওয়ার পরেও এটি আপনার চিত্রের সিনোগ্রামে দুটি মূল পর্বের কোনওটি খুঁজে পায় না:

এখানে চিত্র বর্ণনা লিখুন

তারা সেখানে আছে তবে ওজন ফাংশনের মধ্য চূড়ার কাছে স্টাফ দেখে তারা অভিভূত। সঠিক ওজন এবং টুইটগুলি এই পদ্ধতিটি সম্ভবত কাজ করতে পারে তবে সঠিক টুইটগুলি কী তা আমি নিশ্চিত নই। এটি সম্ভবত পৃষ্ঠার স্ক্যানগুলির বৈশিষ্ট্যগুলির উপরও নির্ভর করে। সম্ভবত ভারীকরণের জন্য সাধারণকরণের মতো স্লাইস বা কিছুতে সামগ্রিক শক্তি থেকে উদ্ভূত হওয়া প্রয়োজন।

from pylab import *
from scipy.misc import radon
import Image

filename = 'rivers.png'
I = asarray(Image.open(filename).convert('L').rotate(90))

# Do the radon transform and display the result
a = radon(I, theta = mgrid[0:180])

# Remove offset
a = a - min(a.flat)

# Weight it to emphasize vertical lines
b = arange(shape(a)[1]) #
d = (0.5-0.5*cos(b*pi/90))*a

figure()
imshow(d.T)
gray()
show()

# Find the global maximum, plot it, print it
peak_x, peak_y = unravel_index(argmax(d),shape(d))
plot(peak_x, peak_y,'ro')
print len(d)- peak_x, 'pixels', peak_y, 'degrees'

আপনি যদি প্রথমে কোনও অসম্পূর্ণ গাউসিয়ান নিয়ে ঝাপসা করেন? অর্থাৎ অনুভূমিক দিকের সরু, উল্লম্ব দিকের প্রশস্ত।
জোনাস

@ জোনাস: এটি সম্ভবত সাহায্য করবে। মূল সমস্যাটি পটভূমির ঘূর্ণনের সাথে পটভূমিতে এতটাই পরিবর্তিত হওয়ার পরে পটভূমি থেকে স্বয়ংক্রিয়ভাবে পিকগুলি তুলে নেওয়া হয়। অসম্পূর্ণ অস্পষ্টতা লাইন থেকে রেখায় অনুভূমিক স্ট্রাইপগুলি মসৃণ করতে পারে।
এন্ডোলিথ

এটি পাঠ্যটিতে লাইনগুলির ঘূর্ণন সনাক্তকরণের জন্য ভাল কাজ করে: কমপক্ষে: gist.github.com/endolith/334196bac1cac45a4893
এন্ডোলিথ

16

আমি বিভিন্ন স্কেলগুলিতে ডেরাইভেটিভ বৈশিষ্ট্যগুলি (২ য় ক্রম পর্যন্ত) ব্যবহার করে পিক্সেলগুলিতে একটি বৈষম্যমূলক শ্রেণিবদ্ধীকে প্রশিক্ষণ দিয়েছি।

আমার লেবেলগুলি:

লেবেল

প্রশিক্ষণের চিত্র সম্পর্কে ভবিষ্যদ্বাণী:

এখানে চিত্র বর্ণনা লিখুন

অন্যান্য দুটি চিত্র সম্পর্কে ভবিষ্যদ্বাণী:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

আমি অনুমান করি এটি আশাব্যঞ্জক বলে মনে হচ্ছে এবং আরও প্রশিক্ষণের ডেটা এবং সম্ভবত স্মার্ট বৈশিষ্ট্যগুলি দেওয়া হলে ব্যবহারযোগ্য ফলাফল পেতে পারে। অন্যদিকে এই ফলাফলগুলি পেতে আমার কয়েক মিনিট সময় লেগেছে। ইলেস্টিক ওপেন সোর্স সফটওয়্যার ব্যবহার করে আপনি ফলাফলগুলি পুনরায় উত্পাদন করতে পারেন । [অস্বীকৃতি: আমি অন্যতম প্রধান বিকাশকারী]]


2

(দুঃখিত, এই পোস্টটি দুর্দান্ত ফলাফল নিয়ে আসে না))

আপনি যদি টেক্সের ইতিমধ্যে (চিঠি এবং অবস্থান) রয়েছে এমন তথ্য নিয়ে কাজ করতে চান তবে আপনি চিঠিপত্র এবং চিঠির জোড়গুলিকে ম্যানুয়ালি এক দিক বা অন্য দিকে "opালু" হিসাবে শ্রেণিবদ্ধ করতে পারেন। উদাহরণস্বরূপ, "ডাব্লু" এর এসডাব্লু এবং এসই কোণার opালু রয়েছে, "আল" কম্বোতে একটি এনডাব্লু কোণার opeাল আছে, "কে" এর একটি এনই কোণার opeাল রয়েছে। (বিরামচিহ্নগুলি ভুলে যাবেন না - গ্লিফ বাক্সের নীচের অর্ধেকটি পূরণ করে এমন একটি অক্ষরের পরে একটি উদ্ধৃতি একটি দুর্দান্ত opeালু স্থাপন করে; Q এর পরে উদ্ধৃতিটি খুব শক্তিশালী))

তারপরে, কোনও জায়গার বিপরীত দিকে অনুরূপ opালগুলির সংস্থানগুলি অনুসন্ধান করুন - এসডাব্লু-টু-এনই নদীর জন্য "ডাব্লু আল" বা এনডাব্লু-টু-এসই নদীর জন্য "কে টি"। যখন আপনি একটি লাইনে একটি সন্ধান করেন, দেখুন কোনও অনুরূপ ঘটেছে কিনা, উপরে / নীচের লাইনে যথাযথভাবে বাম বা ডানে স্থানান্তরিত হয়েছে; আপনি যখন এগুলির একটি রান খুঁজে পান, সম্ভবত একটি নদী আছে।

এছাড়াও, স্পষ্টতই, কেবল সমতল উল্লম্ব নদীগুলির জন্য প্রায় উল্লম্বভাবে সজ্জিত স্থানগুলি অনুসন্ধান করুন।

Theালের "শক্তি" পরিমাপ করে আপনি খানিকটা পরিশীলিত হয়ে উঠতে পারেন: opeালের কারণে অগ্রিম বাক্সের কত অংশ "খালি" রয়েছে এবং এইভাবে নদীর প্রস্থকে অবদান রেখে চলেছে। "ডাব্লু" মোটামুটি ছোট, কারণ নদীর অবদানের জন্য এটির অগ্রিম বাক্সের কেবল একটি ছোট কোণ রয়েছে, তবে "ভি" খুব শক্তিশালী। "খ" "কে" এর চেয়ে কিছুটা শক্তিশালী; মৃদু বক্ররেখা আরও দৃশ্যমান-অবিচ্ছিন্ন নদীর প্রান্ত দেয়, এটি আরও দৃ stronger় এবং চাক্ষুষভাবে প্রশস্ত করে তোলে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.